[PATCH v5 05/16] printk: Prefer the console either via name or devname exclusively
From: Petr Mladek
Date: Tue Sep 29 2026 - 08:10:06 EST
The commit 7640f1a44eba0cc1a4 ("printk:
Add match_devname_and_update_preferred_console()") added the possibility
to prefer a console driver via device name. The name of the console driver
gets assigned when the device gets initialized and it triers whether
it is eligible for a console.
The above mentioned commit ensures that __add_preferred_console() is called
at least with name or devname value. But it does not check whether
both are defined which is a non-sense.
Add the check and do not fail quietly. Also shuffle the code a bit
to make it ready for adding more checks.
Signed-off-by: Petr Mladek <pmladek@xxxxxxxx>
---
kernel/printk/printk.c | 30 ++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 174aee533a53..0199c918ef03 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -2557,7 +2557,13 @@ asmlinkage __visible void early_printk(const char *fmt, ...)
*
* The function adds or updates an entry in preferred_consoles[] array. Also
* it updates some global variables which are used to make the right decisions
- * in register_console().
+ * in register_console(). Finally, it enforces some rules:
+ *
+ * 1. Either @name OR @devname are allowed. [*]
+ *
+ * [*] A valid @name and @idx will get assigned for a devname later when
+ * @devname matches during the device initialization, see
+ * match_devname_and_update_preferred_console().
*/
static int add_or_update_preferred_console(unsigned int i,
const char *name, const short idx,
@@ -2587,11 +2593,23 @@ static int add_or_update_preferred_console(unsigned int i,
if (!pc->name[0] && !pc->devname[0])
is_new_entry = true;
- if (is_new_entry) {
- if (devname)
- strscpy(pc->devname, devname);
- if (name)
- strscpy(pc->name, name);
+ if (is_new_entry && devname) {
+ /*
+ * A valid console name and index will get assigned when
+ * a matching device gets registered.
+ */
+ if (name) {
+ pr_err("Adding a preferred console devname with a hard-coded console name: %s, %s\n",
+ devname, name);
+ return -EINVAL;
+ }
+
+ strscpy(pc->devname, devname);
+ pc->index = idx;
+ }
+
+ if (is_new_entry && name) {
+ strscpy(pc->name, name);
pc->index = idx;
}
--
2.55.0