lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 24 Sep 2009 09:08:30 -0500
From:	Jason Wessel <jason.wessel@...driver.com>
To:	Johannes Weiner <hannes@...xchg.org>
CC:	Ingo Molnar <mingo@...e.hu>, Len Brown <lenb@...nel.org>,
	Greg KH <gregkh@...e.de>,
	Linus Torvalds <torvalds@...ux-foundation.org>,
	Andrew Morton <akpm@...ux-foundation.org>,
	linux-kernel@...r.kernel.org, linux-usb@...r.kernel.org
Subject: Re: [origin tree boot hang] [PATCH] Revert "early_printk: Allowmorethan
 one early console"

Johannes Weiner wrote:
> On Wed, Sep 23, 2009 at 04:19:02PM -0500, Jason Wessel wrote:
>   
>> Ingo Molnar wrote:
>>     
>>> * Ingo Molnar <mingo@...e.hu> wrote:
>>>
>>>
>>>   
>>>       
>>>> The commit point to which the attached config and bootlog belongs is:
>>>>
>>>>   2.6.31-07863-gb64ada6
>>>>
>>>> Reverting:
>>>>
>>>>   c953094: early_printk: Allow more than one early console
>>>>
>>>> solves it.
>>>>     
>>>>         
>>> btw., the boot options are:
>>>
>>> Command line: root=/dev/sda6 earlyprintk=serial,ttyS0,115200 console=ttyS0,115200 debug
>>> initcall_debug apic=verbose sysrq_always_enabled ignore_loglevel 
>>> selinux=0 nmi_watchdog=0 panic=1 3
>>>
>>>   
>>>       
>> AH HA!
>>
>> earlyprintk=serial,ttyS0,115200
>>
>> You are invoking the same device twice which is why you are having
>> infinite recursion.  It was not obvious to me why the earlyprintk
>> code would allow "serial" or "ttyS", but perhaps we need to protect
>> for that?
>>     
>
> That is how it's documented, quoting kernel-parameters.txt:
>
> 	earlyprintk=vga
> 	earlyprintk=serial[,ttySn[,baudrate]]
> 	earlyprintk=dbgp
>
> so ttySn is actually an option to the 'serial' mode.  This has been
> working before because we parsed only one mode but now we parse
>
> 	serial,ttyS0,115200
>
> correctly and then advance character-wise, looking for another
> console:
>
> 	erial,ttyS0,...
> 	rial,ttyS0...
> 	...
>
> until we hit 'ttyS0,115200' which again we parse as a stand-alone
> console definition, yielding twice the same one.
>
>   
>> Your boot line should be:
>>
>> earlyprintk=serial,115200
>>     
>
> Sure this works?  I haven't tried it, but the code looks like it would
> misinterpret the baudrate as the port number, fail and advance to the
> end of the string, and not set the baudrate at all.  You can specify
> ttyS0 standalone, but not serial alone.
>
>   

Perhaps not.  I see the documentation needs an update though because it
did not match the code, for the case of just using ttyS0 or ttyS1 directly.

> It would probably make sense to skip what is successfully parsed
> completely, perhaps like the (untested) diff below?  The other init
> functions would need to be converted too, so that we know how much
> they peeked into the buffer.
>
>   

We can simply check the extra arg case after the parsing and advance,
instead of modifying all the functions.  Then it is all backward compatible.

The fully tested patch follows.

Ingo if you agree, can you pull in this patch?  Or comment and I'll make
some further adjustments.

Thanks,
Jason.

View attachment "0001-x86-earlyprintk-Fix-regression-to-handle-serial-ttyS.patch" of type "text/x-diff" (1959 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ