From 0e6d3243ad3c5ae719c23e14b159c27344523583 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 6 Apr 2021 11:45:47 +0200 Subject: [PATCH] proc-cmdline: allow backslash escapes when parsing /proc/cmdline So far when parsing /proc/cmdline we'd consider backslashes as mechanisms for escaping whitepace or quotes. This changes things so that they are retained as they are instead. The kernel itself doesn't allow such escaping, and hence we shouldn't do so either (see lib/cmdline.c in the kernel sources; it does support "" quotes btw). This fix is useful to allow specifying backslash escapes in the "root=" cmdline option to be passed through to systemd-fstab-generator. Example: root=/dev/disk/by-partlabel/Root\x20Partition Previously we'd eat up the "\" so that we'd then look for a device /dev/disk/by-partlabel/Rootx20Partition which never shows up. (cherry picked from commit d997861ea7dae633174cd80ab55552c020526b62) --- src/basic/proc-cmdline.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c index 0b6fb137bd..410b8a3eb5 100644 --- a/src/basic/proc-cmdline.c +++ b/src/basic/proc-cmdline.c @@ -47,7 +47,7 @@ static int proc_cmdline_extract_first(const char **p, char **ret_word, ProcCmdli _cleanup_free_ char *word = NULL; const char *c; - r = extract_first_word(&q, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX); + r = extract_first_word(&q, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX|EXTRACT_RETAIN_ESCAPE); if (r < 0) return r; if (r == 0) -- 2.25.1