Messages in this thread |  | | Date | Wed, 3 Oct 2018 11:23:49 +0200 | From | Petr Mladek <> | Subject | Re: [PATCHv2] printk: CON_PRINTBUFFER console registration is a bit racy |
| |
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.
Best Regards, Petr
|  |