mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
printk: Remove console options before decoding the name
This fixes a regression when a console option includes ':'. Commit
7640f1a44e ("printk: Add match_devname_and_update_preferred_console()")
introduced console=DEVNAME:0.0 hardware style addressing by looking for a
colon. If the colon is part of an option the name is handled as devname
instead of ttyname.
Fix by handling the options first which will add a NULL terminator to the
string. Note that parsing the options first means that also idx parsing
needs changing. Handle the idx parsing by refactoring the code (thanks to
Petr Mladek).
Signed-off-by: David Engraf <david.engraf@sysgo.com>
Reviewed-by: Tony Lindgren <tony.lindgren@linux.intel.com>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Reviewed-by: John Ogness <john.ogness@linutronix.de>
Link: https://patch.msgid.link/20260924070153.250783-2-david.engraf@sysgo.com
[pmladek@suse.com: Updated the commit message as suggested by Tony Lindgren]
Signed-off-by: Petr Mladek <pmladek@suse.com>
This commit is contained in:
parent
ae30792e53
commit
b80fc54890
|
|
@ -2646,24 +2646,25 @@ static int __init console_setup(char *str)
|
|||
if (_braille_console_setup(&str, &brl_options))
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* Decode str into name, index and options. Start with options, since
|
||||
* it might also contain a ':' used for DEVNAME.
|
||||
*/
|
||||
options = strchr(str, ',');
|
||||
if (options)
|
||||
*(options++) = 0;
|
||||
|
||||
/* For a DEVNAME:0.0 style console the character device is unknown early */
|
||||
if (strchr(str, ':'))
|
||||
devname = buf;
|
||||
else
|
||||
ttyname = buf;
|
||||
|
||||
/*
|
||||
* Decode str into name, index, options.
|
||||
*/
|
||||
if (ttyname && isdigit(str[0]))
|
||||
scnprintf(buf, sizeof(buf), "ttyS%s", str);
|
||||
else
|
||||
strscpy(buf, str);
|
||||
|
||||
options = strchr(str, ',');
|
||||
if (options)
|
||||
*(options++) = 0;
|
||||
|
||||
#ifdef __sparc__
|
||||
if (!strcmp(str, "ttya"))
|
||||
strscpy(buf, "ttyS0");
|
||||
|
|
@ -2671,17 +2672,18 @@ static int __init console_setup(char *str)
|
|||
strscpy(buf, "ttyS1");
|
||||
#endif
|
||||
|
||||
for (s = buf; *s; s++)
|
||||
if ((ttyname && isdigit(*s)) || *s == ',')
|
||||
break;
|
||||
|
||||
/* @idx will get defined when devname matches. */
|
||||
if (devname)
|
||||
idx = -1;
|
||||
else
|
||||
if (ttyname) {
|
||||
/* Detect @idx in ttyname and remove it. */
|
||||
for (s = ttyname; *s; s++) {
|
||||
if (isdigit(*s))
|
||||
break;
|
||||
}
|
||||
idx = simple_strtoul(s, NULL, 10);
|
||||
|
||||
*s = 0;
|
||||
*s = 0;
|
||||
} else {
|
||||
/* @idx will get defined when devname matches. */
|
||||
idx = -1;
|
||||
}
|
||||
|
||||
__add_preferred_console(ttyname, idx, devname, options, brl_options, true);
|
||||
return 1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user