Messages in this thread |  | | From | Sergey Senozhatsky <> | Date | Wed, 3 Oct 2018 21:27:26 +0900 | Subject | Re: [PATCHv2] printk: CON_PRINTBUFFER console registration is a bit racy |
| |
On (10/03/18 11:23), Petr Mladek wrote: > On Fri 2018-09-28 18:53:04, Sergey Senozhatsky wrote: > > CON_PRINTBUFFER console registration requires us to do several > > preparation steps: > > - Rollback console_seq to replay logbuf messages which were already > > seen on other consoles; > > - Set exclusive_console flag so console_unlock() will ->write() logbuf > > messages only to the exclusive_console driver. > > > > The way we do it, however, is a bit racy > > > > logbuf_lock_irqsave(flags); > > console_seq = syslog_seq; > > console_idx = syslog_idx; > > logbuf_unlock_irqrestore(flags); > > << preemption enabled > > << irqs enabled > > exclusive_console = newcon; > > console_unlock(); > > > > We rollback console_seq under logbuf_lock with IRQs disabled, but > > we set exclusive_console with local IRQs enabled and logbuf unlocked. > > If the system oops-es or panic-s before we set exclusive_console - and > > given that we have IRQs and preemption enabled there is such a > > possibility - we will re-play all logbuf messages to every registered > > console, which may be a bit annoying and time consuming. > > > > Move exclusive_console assignment to the same IRQs-disabled and > > logbuf_lock-protected section where we rollback console_seq. > > > > Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> > > JFYI, I have just pushed this into printk.git, for-4.20 branch.
Thanks.
-ss
|  |