Re: [PATCH] register_console: prevent adding the same console twice

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2013-03-22 at 11:10 +0100, Andreas Bießmann wrote:
> 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. 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@xxxxxxxxxxxx>
> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: Kay Sievers <kay@xxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> ---
>  kernel/printk.c |    8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/kernel/printk.c b/kernel/printk.c
> index 0b31715..f78bfcd 100644
> --- a/kernel/printk.c
> +++ b/kernel/printk.c
> @@ -2254,6 +2254,14 @@ void register_console(struct console *newcon)
>  	unsigned long flags;
>  	struct console *bcon = NULL;
>  
> +	if (console_drivers)
> +		for_each_console(bcon)
> +			if (bcon == newcon) {
> +				pr_warn("prevent adding console '%s%d' twice\n",
> +					newcon->name, newcon->index);

Since this is surely a bug in the calling driver, I think the warning
should be louder, i.e. use WARN.

Ben.

> +				return;
> +			}
> +
>  	/*
>  	 * before we register a new CON_BOOT console, make sure we don't
>  	 * already have a valid console

-- 
Ben Hutchings
Make three consecutive correct guesses and you will be considered an expert.

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]