Re: [PATCH printk v3 33/40] printk, xen: fbfront: create/use safe function for forcing preferred
From: Petr Mladek <pmladek@suse.com>
Date: 2022-11-11 10:48:10
Also in:
dri-devel, lkml
From: Petr Mladek <pmladek@suse.com>
Date: 2022-11-11 10:48:10
Also in:
dri-devel, lkml
On Mon 2022-11-07 15:22:31, John Ogness wrote:
With commit 9e124fe16ff2("xen: Enable console tty by default in domU if it's not a dummy") a hack was implemented to make sure that the tty console remains the console behind the /dev/console device. The main problem with the hack is that, after getting the console pointer to the tty console, it is assumed the pointer is still valid after releasing the console_sem. This assumption is incorrect and unsafe. Make the hack safe by introducing a new function console_force_preferred_locked() and perform the full operation under the console_list_lock.--- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c@@ -3457,6 +3458,43 @@ int unregister_console(struct console *console) } EXPORT_SYMBOL(unregister_console); +/** + * console_force_preferred_locked - force a registered console preferred + * @con: The registered console to force preferred. + * + * Must be called under console_list_lock(). + */ +void console_force_preferred_locked(struct console *con) +{ + struct console *cur_pref_con;
One more thing. It would make sense to check that it has really been called under console_list_lock(): lockdep_assert_console_list_lock_held();
+ + if (!console_is_registered_locked(con)) + return; + + cur_pref_con = console_first(); + + /* Already preferred? */ + if (cur_pref_con == con) + return; +
Best Regards, Petr