From nobody Tue Feb 10 16:18:55 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B639337AA9E for ; Mon, 9 Feb 2026 15:38:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770651489; cv=none; b=FVGCJCCitR1JsyyqFqWp8ZBx2pNzx/l927VplKdAXIIh/Tkn0oom45J38OkaCS47pTl7aylGdChHik1RlmxeGlCdvv4Rvh2D+LNrGsybGg6CWFl7he5vMJcTpnSbYcBym70wS0UiFru24YzJLc0XakhGBBVFnVPOfw74dQuMRiQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770651489; c=relaxed/simple; bh=k8L3KQzCnAhs30Fj85oVFwKJSvyqb8KCgp33iA8PQYg=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=IGOMCbHo0xj7k9qNVB1XPlKUryuzt1ESkVPVyhN9dy9ZxCK0lqnXnWMs4HsunMrpq6NRDhZkmbF/+WqpfzvfxzJpUJ2ksYq6czzWPDoIVEUAvgUlm4gkh2O7V+2oPiwoeU+hVyBPE4a8Ua5wO050JlfWn0MC04mc/h9bJuKClvk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=G/kb6oeD; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G/kb6oeD" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-4359108fd24so2939077f8f.2 for ; Mon, 09 Feb 2026 07:38:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770651487; x=1771256287; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=6qEmIRJDm3uUm8EKhoqE5T+3bDP/CkAdKaLHxwbAztk=; b=G/kb6oeDN/SUUDzWkQf//CGPRKF5VL4USl7prQ469JhoWA/q2QGyb++vN4rUV+UajQ EhLzubx+xDcX8reyoCQUv/pP2s0i5BFbReAHBEs8TFVc2qnBXeQngKtQ+h28KkCXYj7j 0yqYwTz6N0Nkum+0UB4lDsMPFHYqjpqSN/iHGPndNSx7gQql3mwp5bs1PDHcyWN7/qKr zzMa2R28+U6MrwFOQ15u90WUyt9IX7xEsZeMbF6R0xosmmkvIfdUTpS+Nq2qMJFptdap rTn+t9MjzhOtfxwcupfpCY0EstEdFjz05n0KSHZbWFdRS3QbUoDE3uCOl1X+cSeMhdSc CjOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770651487; x=1771256287; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6qEmIRJDm3uUm8EKhoqE5T+3bDP/CkAdKaLHxwbAztk=; b=kKR4/LJyI7ijjcfZS36aGxBMoMgsOko9X62nhS5bn90QaBPsVOExL2GqXDrLZYqbhj 7nd43jzHsM/jehPh0ZObNTuOSJFucKQS6JHRFuCMLyn8NbFOCBc4IW6IQRpVRzyQ4Ew3 b1SW4QQssQYIOWDkvAOJJQLsUuPb9PvnkeZeOOTNhbv2Zrr5JZejkS3WUxzoHIi4e6Q7 2bggCir8vRF5Z+6wfijapUj1ankMTLlqzcwx8uAE48yKNoDSCIG86Ww9csl+zzWPpz5d C1GwWwLa0d4iSnN9YyYnZmlXTgGTfz0hEtaWzYaS25QxPDPvD63Ykrzp160sxskNC5VC JTYQ== X-Forwarded-Encrypted: i=1; AJvYcCU1sW9Ne7IIihQ/CzUDEBvtF462hNO/LS/hbukFHrxAnB+cF9JYFOhtEkNlUq3i5WlO84Z+JMmI2vhb+FA=@vger.kernel.org X-Gm-Message-State: AOJu0YxTO9A8uH8PkQXZiHtwd0L7qUWqQR9lr2lJSmia9W6QXdwzNY1K CwHSsOPiTpxbqiV0KIom0OmX9hS4VHHurO3FWlWw/8D0zEsVgJSsl0h4 X-Gm-Gg: AZuq6aJEnDGI9H0NgJejtKZr9KqutFIR5je+RGFXH5bHyuAwcTastExpLDcHMAEzThT Fz/Cg//3yRORC5dGYUxwKQDc5vz0NljODJszM4gpeohBGinJwEUqQvaRi883cOdF7tp9lgx6hVu EpwZf/hd1Op8aI++qlUKYMuOpnYWuNUJiLjfSGLeH/lte4cSDTGV+rpfmTipyH/GxpMrLkwiFFx FRucjypj/hqDirSpn2kxMMYEunmqrmlVfyl4yOZTD9A9l8yCzu7RcCMnjAGcecSrtJNSpl/aHZg QIsQYfwl2Zb4wVI6Z2y+EFuJs/SY7JTKk0+SbU6ZIEeZYTSkEOIMgsIpFVyVxX74JiYQqrqxJNy iLshdXLyOyZ5UNBpWCxs5zgYHvnR9Ud00IE4qCVkkgHVU9ZmkLvTmtta8W9o55zJ8moIRiMukOh xIqDpa/8eX42UENI/au2iu23gdAaR7EUbLG6PgxllF54cXapMrx6U6Ng== X-Received: by 2002:a5d:5f82:0:b0:430:96bd:411b with SMTP id ffacd0b85a97d-43629691fedmr16528175f8f.58.1770651486792; Mon, 09 Feb 2026 07:38:06 -0800 (PST) Received: from Ansuel-XPS24 (93-34-90-125.ip49.fastwebnet.it. [93.34.90.125]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-4376d3a32basm10697168f8f.14.2026.02.09.07.38.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Feb 2026 07:38:06 -0800 (PST) From: Christian Marangi To: Nathan Chancellor , Nicolas Schier , Christian Marangi , David Disseldorp , Dmitry Safonov <0x7f454c46@gmail.com>, linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH] initramfs: correctly handle space in path on cpio list generation Date: Mon, 9 Feb 2026 16:37:58 +0100 Message-ID: <20260209153800.28228-1-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The current gen_initramfs.sh and gen_init_cpio.c tools doesn't correctly handle path or filename with space in it. Although highly discouraged, Linux also supports filename or path with whiespace and currently this will produce error on generating and parsing the cpio_list file as the pattern won't match the expected variables order. (with gid or mode parsed as string) This was notice when creating an initramfs with including the ALSA test files and configuration that have whitespace in both some .conf and even some symbolic links. Example error: usr/gen_initramfs.sh: line 97: [: Devkit.conf: integer expected usr/gen_initramfs.sh: line 97: [: Devkit.conf: integer expected usr/gen_initramfs.sh: line 97: [: Nexus: integer expected usr/gen_initramfs.sh: line 97: [: Tab: integer expected usr/gen_initramfs.sh: line 98: [: A500: integer expected usr/gen_initramfs.sh: line 97: [: Slider: integer expected usr/gen_initramfs.sh: line 98: [: WM8903.conf: integer expected usr/gen_initramfs.sh: line 97: [: Transformer: integer expected usr/gen_initramfs.sh: line 98: [: WM8903.conf: integer expected usr/gen_initramfs.sh: line 97: [: Infinity: integer expected usr/gen_initramfs.sh: line 98: [: TF700T: integer expected usr/gen_initramfs.sh: line 97: [: Pad: integer expected usr/gen_initramfs.sh: line 98: [: TF300T: integer expected usr/gen_initramfs.sh: line 97: [: Pad: integer expected usr/gen_initramfs.sh: line 98: [: TF300TG: integer expected usr/gen_initramfs.sh: line 97: [: Pad: integer expected usr/gen_initramfs.sh: line 98: [: TF300TL: integer expected usr/gen_initramfs.sh: line 97: [: Prime: integer expected usr/gen_initramfs.sh: line 98: [: TF201: integer expected usr/gen_initramfs.sh: line 97: [: 4X: integer expected usr/gen_initramfs.sh: line 98: [: HD: integer expected usr/gen_initramfs.sh: line 97: [: Vu: integer expected usr/gen_initramfs.sh: line 98: [: MAX98089.conf: integer expected Caused by example file: /usr/share/alsa/ucm2/conf.d/tegra/Asus Transformer Pad TF300TL RT5631.conf To correctly handle this problem, rework the gen_initramfs.sh and gen_init_cpio.c to guard all the path with "" to handle all kind of whitespace for filename/path. The default_cpio_list is also updated to follow this new pattern. Signed-off-by: Christian Marangi --- usr/default_cpio_list | 6 +++--- usr/gen_init_cpio.c | 10 +++++----- usr/gen_initramfs.sh | 27 +++++++++++++++++++-------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/usr/default_cpio_list b/usr/default_cpio_list index 37b3864066e8..d4a66b4aa7f7 100644 --- a/usr/default_cpio_list +++ b/usr/default_cpio_list @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only # This is a very simple, default initramfs =20 -dir /dev 0755 0 0 -nod /dev/console 0600 0 0 c 5 1 -dir /root 0700 0 0 +dir "/dev" 0755 0 0 +nod "/dev/console" 0600 0 0 c 5 1 +dir "/root" 0700 0 0 diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c index b7296edc6626..ca5950998841 100644 --- a/usr/gen_init_cpio.c +++ b/usr/gen_init_cpio.c @@ -166,7 +166,7 @@ static int cpio_mkslink_line(const char *line) int gid; int rc =3D -1; =20 - if (5 !=3D sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) "s %o %d %d= ", name, target, &mode, &uid, &gid)) { + if (5 !=3D sscanf(line, "\"%" str(PATH_MAX) "[^\"]\" \"%" str(PATH_MAX) "= [^\"]\" %o %d %d", name, target, &mode, &uid, &gid)) { fprintf(stderr, "Unrecognized dir format '%s'", line); goto fail; } @@ -244,7 +244,7 @@ static int cpio_mkgeneric_line(const char *line, enum g= eneric_types gt) int gid; int rc =3D -1; =20 - if (4 !=3D sscanf(line, "%" str(PATH_MAX) "s %o %d %d", name, &mode, &uid= , &gid)) { + if (4 !=3D sscanf(line, "\"%" str(PATH_MAX) "[^\"]\" %o %d %d", name, &mo= de, &uid, &gid)) { fprintf(stderr, "Unrecognized %s format '%s'", line, generic_type_table[gt].type); goto fail; @@ -322,7 +322,7 @@ static int cpio_mknod_line(const char *line) unsigned int min; int rc =3D -1; =20 - if (7 !=3D sscanf(line, "%" str(PATH_MAX) "s %o %d %d %c %u %u", + if (7 !=3D sscanf(line, "\"%" str(PATH_MAX) "[^\"]\" %o %d %d %c %u %u", name, &mode, &uid, &gid, &dev_type, &maj, &min)) { fprintf(stderr, "Unrecognized nod format '%s'", line); goto fail; @@ -527,8 +527,8 @@ static int cpio_mkfile_line(const char *line) int end =3D 0, dname_len =3D 0; int rc =3D -1; =20 - if (5 > sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) - "s %o %d %d %n", + if (5 > sscanf(line, "\"%" str(PATH_MAX) "[^\"]\" \"%" + str(PATH_MAX) "[^\"]\" %o %d %d %n", name, location, &mode, &uid, &gid, &end)) { fprintf(stderr, "Unrecognized file format '%s'", line); goto fail; diff --git a/usr/gen_initramfs.sh b/usr/gen_initramfs.sh index 7eba2fddf0ef..13f2219a1ce9 100755 --- a/usr/gen_initramfs.sh +++ b/usr/gen_initramfs.sh @@ -103,7 +103,8 @@ parse() { =20 case "${ftype}" in "file") - str=3D"${ftype} ${name} ${location} ${str}" + printf "%s \"%s\" \"%s\" %s\n" \ + "${ftype}" "${name}" "${location}" "${str}" >> $cpio_list ;; "nod") local dev=3D"`LC_ALL=3DC ls -l "${location}"`" @@ -113,19 +114,20 @@ parse() { =20 [ -b "${location}" ] && dev=3D"b" || dev=3D"c" =20 - str=3D"${ftype} ${name} ${str} ${dev} ${maj} ${min}" + printf "%s \"%s\" %s %s %s %s\n" \ + "${ftype}" "${name}" "${str}" "${dev}" "${maj}" "${min}" >> $cpio_list ;; "slink") local target=3D`readlink "${location}"` - str=3D"${ftype} ${name} ${target} ${str}" + printf "%s \"%s\" \"%s\" %s\n" \ + "${ftype}" "${name}" "${target}" "${str}" >> $cpio_list ;; *) - str=3D"${ftype} ${name} ${str}" + printf "%s \"%s\" %s\n" \ + "${ftype}" "${name}" "${str}" >> $cpio_list ;; esac =20 - echo "${str}" >> $cpio_list - return 0 } =20 @@ -156,8 +158,17 @@ dir_filelist() { =20 echo "${dirlist}" | \ while read x; do - list_parse $x - parse $x + # Reverse progressive matching to handle path + # with space (last arg) + gid=3D${x##* } + x=3D${x% *} + uid=3D${x##* } + x=3D${x% *} + mode=3D${x##* } + path=3D${x% *} + + list_parse "$path" "$mode" "$uid" "$gid" + parse "$path" "$mode" "$uid" "$gid" done fi } --=20 2.51.0