From: "Andreas Bießmann" <andreas@biessmann.de>
To: linux-kernel@vger.kernel.org
Cc: "Andreas Bießmann" <andreas@biessmann.de>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Kay Sievers" <kay@vrfy.org>,
"Ben Hutchings" <ben@decadent.org.uk>,
stable@kernel.org
Subject: [PATCH v2] register_console: prevent adding the same console twice
Date: Mon, 25 Mar 2013 09:59:24 +0100 [thread overview]
Message-ID: <1364201964-2990-1-git-send-email-andreas@biessmann.de> (raw)
In-Reply-To: <1363947052-15605-1-git-send-email-andreas@biessmann.de>
This patch guards the console_drivers list to be corrupted. The
for_each_console() macro insist on a strictly forward list ended by NULL:
con0->next->con1->next->NULL
Without this patch it may happen easily to destroy this list for example by
adding 'earlyprintk' twice, especially on embedded devices where the early
console is often a single static instance. This will result in the following
list:
con0->next->con0
This in turn will result in an endless loop in console_unlock() later on by
printing the first __log_buf line endlessly.
Signed-off-by: Andreas Bießmann <andreas@biessmann.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Kay Sievers <kay@vrfy.org>
Cc: Ben Hutchings <ben@decadent.org.uk>
Cc: stable@kernel.org
---
since v1:
* use WARN() as Ben suggested
* print 'already registered' instead of 'prevent registering'
kernel/printk.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/kernel/printk.c b/kernel/printk.c
index abbdd9e..180ee25 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -2214,6 +2214,13 @@ void register_console(struct console *newcon)
unsigned long flags;
struct console *bcon = NULL;
+ if (console_drivers)
+ for_each_console(bcon)
+ if (WARN(bcon == newcon,
+ "console '%s%d' already registered\n",
+ bcon->name, bcon->index))
+ return;
+
/*
* before we register a new CON_BOOT console, make sure we don't
* already have a valid console
--
1.7.10.4
next prev parent reply other threads:[~2013-03-25 8:58 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-22 10:10 [PATCH] register_console: prevent adding the same console twice Andreas Bießmann
2013-03-22 18:36 ` Ben Hutchings
2013-03-25 8:59 ` Andreas Bießmann [this message]
2013-05-07 7:18 ` [PATCH v2] " Andreas Bießmann
2013-08-02 10:23 ` [RESEND][PATCH " Andreas Bießmann
2013-08-02 10:37 ` Greg Kroah-Hartman
2013-08-02 10:37 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1364201964-2990-1-git-send-email-andreas@biessmann.de \
--to=andreas@biessmann.de \
--cc=ben@decadent.org.uk \
--cc=gregkh@linuxfoundation.org \
--cc=kay@vrfy.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.