On (01/22/18 17:56), Sergey Senozhatsky wrote:
[..]
> Assume the following,

But more importantly we are missing another huge thing - console_unlock().

Suppose:

        console_lock();
        << preemption >>
                                                printk
                                                printk
                                                ..
                                                printk
        console_unlock()
         for (;;) {
                call_console_drivers()
                   dump_stack
                   queue IRQ work

                IRQ work >>
                   flush_printk_safe
                   printk_deferred()
                   ...
                   printk_deferred()
                << iret
         }

This should explode: sleepable console_unlock() may reschedule,
printk_safe flush bypasses recursion checks.

        -ss

Reply via email to