From nobody Wed Apr 1 12:34:28 2026 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (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 6AEF23BAD8B for ; Tue, 31 Mar 2026 07:05:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940754; cv=none; b=FpCvl7PxXhfCaxgZwto+vaRXqZfl3QmN4iCptRTWvCn/NFd6eSKFP6iNDKsTYd2EQZPtIRQ8bfgTlau1fVevCf4n7ZcwYkIov9p0vatc8Wj88qVujr2KHJGBNv9GjKHvPLyAi8SEZ5oDgqXqaPNlrS/xdVqKUrTIqkUFttVB32k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940754; c=relaxed/simple; bh=Z4qRXVyMBzLs4cUyAVglvKXOG3YAfN5QlN3Usvr38Sg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HlFkejhX25io5W1FEXYWt9l6ugGIUpEnjpLxQFzM+vR8sOhZVS0/TbEzbv7cVDciFK/c3GT8mMmbgqH8GYUiP3O98s+6DPidzk1fDwD50MZiQdi69AUR0TlzUDvYkrSKTfcK9jZ5V1OyXJsxaPtAZaHBwCftawFHfolK01lNJQ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; arc=none smtp.client-ip=195.135.223.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id D299D4D549; Tue, 31 Mar 2026 07:05:51 +0000 (UTC) Authentication-Results: smtp-out1.suse.de; none Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id DB0134A0B0; Tue, 31 Mar 2026 07:05:47 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id GCusJEtyy2mEQAAAD6G6ig (envelope-from ); Tue, 31 Mar 2026 07:05:47 +0000 From: David Disseldorp To: Andy Shevchenko , David Disseldorp , Petr Mladek , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Al Viro , Christian Brauner , Jan Kara , Steven Rostedt , Rasmus Villemoes , Sergey Senozhatsky , Andrew Morton Subject: [PATCH v5 1/6] initramfs_test: add fill_cpio() inject_ox parameter Date: Tue, 31 Mar 2026 17:57:31 +1100 Message-ID: <20260331070519.5974-2-ddiss@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260331070519.5974-1-ddiss@suse.de> References: <20260331070519.5974-1-ddiss@suse.de> 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 X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Rspamd-Queue-Id: D299D4D549 X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Action: no action X-Spam-Flag: NO X-Spam-Score: -4.00 X-Spam-Level: Content-Type: text/plain; charset="utf-8" fill_cpio() uses sprintf() to write out the in-memory cpio archive from an array of struct initramfs_test_cpio. This change allows callers to modify the cpio sprintf() format string so that future tests can intentionally corrupt the header with "0x" and "0X" prefixed fields. Signed-off-by: David Disseldorp Reviewed-by: Andy Shevchenko --- init/initramfs_test.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/init/initramfs_test.c b/init/initramfs_test.c index 2ce38d9a8fd0f..6fe1c44a74a58 100644 --- a/init/initramfs_test.c +++ b/init/initramfs_test.c @@ -27,7 +27,18 @@ struct initramfs_test_cpio { char *data; }; =20 -static size_t fill_cpio(struct initramfs_test_cpio *cs, size_t csz, char *= out) +/* regular newc header format */ +#define CPIO_HDR_FMT "%s%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%0= 8x%s" +/* + * Bogus newc header with "0x" prefixes on the uid, gid, and namesize valu= es. + * parse_header()/simple_str[n]toul() accept this, contrary to the initram= fs + * specification. + */ +#define CPIO_HDR_OX_INJECT \ + "%s%08x%08x0x%06x0X%06x%08x%08x%08x%08x%08x%08x%08x0x%06x%08x%s" + +static size_t fill_cpio(struct initramfs_test_cpio *cs, size_t csz, + bool inject_ox, char *out) { int i; size_t off =3D 0; @@ -38,9 +49,8 @@ static size_t fill_cpio(struct initramfs_test_cpio *cs, s= ize_t csz, char *out) size_t thislen; =20 /* +1 to account for nulterm */ - thislen =3D sprintf(pos, "%s" - "%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x" - "%s", + thislen =3D sprintf(pos, + inject_ox ? CPIO_HDR_OX_INJECT : CPIO_HDR_FMT, c->magic, c->ino, c->mode, c->uid, c->gid, c->nlink, c->mtime, c->filesize, c->devmajor, c->devminor, c->rdevmajor, c->rdevminor, c->namesize, c->csum, @@ -102,7 +112,7 @@ static void __init initramfs_test_extract(struct kunit = *test) /* +3 to cater for any 4-byte end-alignment */ cpio_srcbuf =3D kzalloc(ARRAY_SIZE(c) * (CPIO_HDRLEN + PATH_MAX + 3), GFP_KERNEL); - len =3D fill_cpio(c, ARRAY_SIZE(c), cpio_srcbuf); + len =3D fill_cpio(c, ARRAY_SIZE(c), false, cpio_srcbuf); =20 ktime_get_real_ts64(&ts_before); err =3D unpack_to_rootfs(cpio_srcbuf, len); @@ -177,7 +187,7 @@ static void __init initramfs_test_fname_overrun(struct = kunit *test) /* limit overrun to avoid crashes / filp_open() ENAMETOOLONG */ cpio_srcbuf[CPIO_HDRLEN + strlen(c[0].fname) + 20] =3D '\0'; =20 - len =3D fill_cpio(c, ARRAY_SIZE(c), cpio_srcbuf); + len =3D fill_cpio(c, ARRAY_SIZE(c), false, cpio_srcbuf); /* overwrite trailing fname terminator and padding */ suffix_off =3D len - 1; while (cpio_srcbuf[suffix_off] =3D=3D '\0') { @@ -219,7 +229,7 @@ static void __init initramfs_test_data(struct kunit *te= st) cpio_srcbuf =3D kmalloc(CPIO_HDRLEN + c[0].namesize + c[0].filesize + 6, GFP_KERNEL); =20 - len =3D fill_cpio(c, ARRAY_SIZE(c), cpio_srcbuf); + len =3D fill_cpio(c, ARRAY_SIZE(c), false, cpio_srcbuf); =20 err =3D unpack_to_rootfs(cpio_srcbuf, len); KUNIT_EXPECT_NULL(test, err); @@ -274,7 +284,7 @@ static void __init initramfs_test_csum(struct kunit *te= st) =20 cpio_srcbuf =3D kmalloc(8192, GFP_KERNEL); =20 - len =3D fill_cpio(c, ARRAY_SIZE(c), cpio_srcbuf); + len =3D fill_cpio(c, ARRAY_SIZE(c), false, cpio_srcbuf); =20 err =3D unpack_to_rootfs(cpio_srcbuf, len); KUNIT_EXPECT_NULL(test, err); @@ -284,7 +294,7 @@ static void __init initramfs_test_csum(struct kunit *te= st) =20 /* mess up the csum and confirm that unpack fails */ c[0].csum--; - len =3D fill_cpio(c, ARRAY_SIZE(c), cpio_srcbuf); + len =3D fill_cpio(c, ARRAY_SIZE(c), false, cpio_srcbuf); =20 err =3D unpack_to_rootfs(cpio_srcbuf, len); KUNIT_EXPECT_NOT_NULL(test, err); @@ -330,7 +340,7 @@ static void __init initramfs_test_hardlink(struct kunit= *test) =20 cpio_srcbuf =3D kmalloc(8192, GFP_KERNEL); =20 - len =3D fill_cpio(c, ARRAY_SIZE(c), cpio_srcbuf); + len =3D fill_cpio(c, ARRAY_SIZE(c), false, cpio_srcbuf); =20 err =3D unpack_to_rootfs(cpio_srcbuf, len); KUNIT_EXPECT_NULL(test, err); @@ -371,7 +381,7 @@ static void __init initramfs_test_many(struct kunit *te= st) }; =20 c.namesize =3D 1 + sprintf(thispath, "initramfs_test_many-%d", i); - p +=3D fill_cpio(&c, 1, p); + p +=3D fill_cpio(&c, 1, false, p); } =20 len =3D p - cpio_srcbuf; @@ -425,7 +435,7 @@ static void __init initramfs_test_fname_pad(struct kuni= t *test) } }; =20 memcpy(tbufs->padded_fname, "padded_fname", sizeof("padded_fname")); - len =3D fill_cpio(c, ARRAY_SIZE(c), tbufs->cpio_srcbuf); + len =3D fill_cpio(c, ARRAY_SIZE(c), false, tbufs->cpio_srcbuf); =20 err =3D unpack_to_rootfs(tbufs->cpio_srcbuf, len); KUNIT_EXPECT_NULL(test, err); @@ -481,7 +491,7 @@ static void __init initramfs_test_fname_path_max(struct= kunit *test) memcpy(tbufs->fname_oversize, "fname_oversize", sizeof("fname_oversize") - 1); memcpy(tbufs->fname_ok, "fname_ok", sizeof("fname_ok") - 1); - len =3D fill_cpio(c, ARRAY_SIZE(c), tbufs->cpio_src); + len =3D fill_cpio(c, ARRAY_SIZE(c), false, tbufs->cpio_src); =20 /* unpack skips over fname_oversize instead of returning an error */ err =3D unpack_to_rootfs(tbufs->cpio_src, len); --=20 2.51.0 From nobody Wed Apr 1 12:34:28 2026 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (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 0540B2EC57C for ; Tue, 31 Mar 2026 07:05:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940761; cv=none; b=N8sbEXBUnufRV/XqdGbllpq6+hTREN6nUMqMONUtQvgs6yggkvH3MR8+x7PyZNqm7FZDNcGD2aR/114bvIgJfAJb9yYD2PkNAoWvquKJQVzAyKPIx5w4BDPdQd33+/pE0Qr0zwKsQiiX+F5ZVwqAB80NqkQ94/IjLopDsU5gb6I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940761; c=relaxed/simple; bh=JQ7fbC4sCs2ab3qKDcuMNDI350t7DDjWh1TVKTM3Wjo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NsKkNV9UX94b53cRzDdDykHrmBLQT0W5+faTVovo8r6fGrOnedrLNWufdLIj+cfLGSTCvulNVXP6sfEKzY8yVr06deFaKevEVcMt1uBUWul5pSaHUrF3WV1BP5DvwniBnPlkn3x6NPDcqXWZ6a9sh7iOEYz01W1TZ9RARI//BuM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=i7k3tyh7; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=iYySBNkq; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=i7k3tyh7; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=iYySBNkq; arc=none smtp.client-ip=195.135.223.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="i7k3tyh7"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="iYySBNkq"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="i7k3tyh7"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="iYySBNkq" Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 59CF15BEA6; Tue, 31 Mar 2026 07:05:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774940756; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y/cTuqu6IlwT0jJNOLukfNyiAd4G46sp4dWM4Th0hbE=; b=i7k3tyh7Z3+O/+Ak7ZAUBMADgikLm4pDDmg21WpDYo9yfSwU1a+mVOfIcVXMZY8pOsFPgP OzmShYUivqAwbWvz+dv+NMHsThcw1CTVDWhZOSMC5XLBJsS8O3qyuD6V2sAz2OnpN6kEEc eauppnBpeV7+2b4ZrAMjC1iHrGUFrUQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774940756; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y/cTuqu6IlwT0jJNOLukfNyiAd4G46sp4dWM4Th0hbE=; b=iYySBNkq+gtDn78Bc1XI0/xL1UYWQyo5ZqATVTuev8taDZv7nFJDn4uMIS/RGitsnxwV82 plIlY8ERtEpnioAw== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774940756; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y/cTuqu6IlwT0jJNOLukfNyiAd4G46sp4dWM4Th0hbE=; b=i7k3tyh7Z3+O/+Ak7ZAUBMADgikLm4pDDmg21WpDYo9yfSwU1a+mVOfIcVXMZY8pOsFPgP OzmShYUivqAwbWvz+dv+NMHsThcw1CTVDWhZOSMC5XLBJsS8O3qyuD6V2sAz2OnpN6kEEc eauppnBpeV7+2b4ZrAMjC1iHrGUFrUQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774940756; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y/cTuqu6IlwT0jJNOLukfNyiAd4G46sp4dWM4Th0hbE=; b=iYySBNkq+gtDn78Bc1XI0/xL1UYWQyo5ZqATVTuev8taDZv7nFJDn4uMIS/RGitsnxwV82 plIlY8ERtEpnioAw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 63D3A4A0A2; Tue, 31 Mar 2026 07:05:52 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id +FafB1Byy2mEQAAAD6G6ig (envelope-from ); Tue, 31 Mar 2026 07:05:52 +0000 From: David Disseldorp To: Andy Shevchenko , David Disseldorp , Petr Mladek , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Al Viro , Christian Brauner , Jan Kara , Steven Rostedt , Rasmus Villemoes , Sergey Senozhatsky , Andrew Morton Subject: [PATCH v5 2/6] initramfs_test: test header fields with 0x hex prefix Date: Tue, 31 Mar 2026 17:57:32 +1100 Message-ID: <20260331070519.5974-3-ddiss@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260331070519.5974-1-ddiss@suse.de> References: <20260331070519.5974-1-ddiss@suse.de> 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 X-Spam-Score: -6.80 X-Spam-Level: X-Spamd-Result: default: False [-6.80 / 50.00]; REPLY(-4.00)[]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; RCVD_COUNT_TWO(0.00)[2]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCPT_COUNT_TWELVE(0.00)[12]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FUZZY_RATELIMITED(0.00)[rspamd.com]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email,imap1.dmz-prg2.suse.org:helo]; RCVD_TLS_ALL(0.00)[] X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" cpio header fields are 8-byte hex strings, but one "interesting" side-effect of our historic simple_str[n]toul() use means that a "0x" (or "0X") prefixed header field will be successfully processed when coupled alongside a 6-byte hex remainder string. "0x" prefix support is contrary to the initramfs specification at Documentation/driver-api/early-userspace/buffer-format.rst which states: The structure of the cpio_header is as follows (all fields contain hexadecimal ASCII numbers fully padded with '0' on the left to the full width of the field, for example, the integer 4780 is represented by the ASCII string "000012ac"): Test for this corner case by injecting "0x" prefixes into the uid, gid and namesize cpio header fields. Confirm that init_stat() returns matching uid and gid values. This test can be modified in future to expect unpack_to_rootfs() failure when header validation is changed to properly follow the specification. Add some missing struct kstat initializations to account for possible init_stat() failures. Signed-off-by: David Disseldorp Reviewed-by: Andy Shevchenko --- init/initramfs_test.c | 60 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/init/initramfs_test.c b/init/initramfs_test.c index 6fe1c44a74a58..b9f83dc194aa6 100644 --- a/init/initramfs_test.c +++ b/init/initramfs_test.c @@ -316,7 +316,7 @@ static void __init initramfs_test_hardlink(struct kunit= *test) { char *err, *cpio_srcbuf; size_t len; - struct kstat st0, st1; + struct kstat st0 =3D {}, st1 =3D {}; struct initramfs_test_cpio c[] =3D { { .magic =3D "070701", .ino =3D 1, @@ -461,7 +461,7 @@ static void __init initramfs_test_fname_path_max(struct= kunit *test) { char *err; size_t len; - struct kstat st0, st1; + struct kstat st0 =3D {}, st1 =3D {}; char fdata[] =3D "this file data will not be unpacked"; struct test_fname_path_max { char fname_oversize[PATH_MAX + 1]; @@ -504,6 +504,61 @@ static void __init initramfs_test_fname_path_max(struc= t kunit *test) kfree(tbufs); } =20 +static void __init initramfs_test_hdr_hex(struct kunit *test) +{ + char *err; + size_t len; + struct kstat st0 =3D {}, st1 =3D {}; + char fdata[] =3D "this file data will be unpacked"; + struct initramfs_test_bufs { + char cpio_src[(CPIO_HDRLEN + PATH_MAX + 3 + sizeof(fdata)) * 2]; + } *tbufs =3D kzalloc(sizeof(struct initramfs_test_bufs), GFP_KERNEL); + struct initramfs_test_cpio c[] =3D { { + .magic =3D "070701", + .ino =3D 1, + .mode =3D S_IFREG | 0777, + .uid =3D 0x123456, + .gid =3D 0x123457, + .nlink =3D 1, + .namesize =3D sizeof("initramfs_test_hdr_hex_0"), + .fname =3D "initramfs_test_hdr_hex_0", + .filesize =3D sizeof(fdata), + .data =3D fdata, + }, { + .magic =3D "070701", + .ino =3D 2, + .mode =3D S_IFDIR | 0777, + .uid =3D 0x000056, + .gid =3D 0x000057, + .nlink =3D 1, + .namesize =3D sizeof("initramfs_test_hdr_hex_1"), + .fname =3D "initramfs_test_hdr_hex_1", + } }; + + /* inject_ox=3Dtrue to add "0x" cpio field prefixes */ + len =3D fill_cpio(c, ARRAY_SIZE(c), true, tbufs->cpio_src); + + err =3D unpack_to_rootfs(tbufs->cpio_src, len); + KUNIT_EXPECT_NULL(test, err); + + KUNIT_EXPECT_EQ(test, init_stat(c[0].fname, &st0, 0), 0); + KUNIT_EXPECT_EQ(test, init_stat(c[1].fname, &st1, 0), 0); + + KUNIT_EXPECT_TRUE(test, + uid_eq(st0.uid, make_kuid(current_user_ns(), (uid_t)0x123456))); + KUNIT_EXPECT_TRUE(test, + gid_eq(st0.gid, make_kgid(current_user_ns(), (gid_t)0x123457))); + KUNIT_EXPECT_TRUE(test, + uid_eq(st1.uid, make_kuid(current_user_ns(), (uid_t)0x56))); + KUNIT_EXPECT_TRUE(test, + gid_eq(st1.gid, make_kgid(current_user_ns(), (gid_t)0x57))); + + KUNIT_EXPECT_EQ(test, init_unlink(c[0].fname), 0); + KUNIT_EXPECT_EQ(test, init_rmdir(c[1].fname), 0); + + kfree(tbufs); +} + /* * The kunit_case/_suite struct cannot be marked as __initdata as this wil= l be * used in debugfs to retrieve results after test has run. @@ -517,6 +572,7 @@ static struct kunit_case __refdata initramfs_test_cases= [] =3D { KUNIT_CASE(initramfs_test_many), KUNIT_CASE(initramfs_test_fname_pad), KUNIT_CASE(initramfs_test_fname_path_max), + KUNIT_CASE(initramfs_test_hdr_hex), {}, }; =20 --=20 2.51.0 From nobody Wed Apr 1 12:34:28 2026 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (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 7F50B3BB9E0 for ; Tue, 31 Mar 2026 07:06:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940764; cv=none; b=k34asKyUYxVkjiV6eA6j35pnSFo4yFKGuP8TFCWjenKkXs/Ia2CPpjFJgasFT7APpZZkfWH0U7Ky3dYZG/6/4IKxbLQ+7jDUgTd9xUtXT5O1xxmaAZ1s3CAvYNl/nJD8RBp+nXp5OBCXCA7oEsqWa5C14WZmA3c4a8m30bahtLY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940764; c=relaxed/simple; bh=1LTk4jsdk68clq9+RGJhf2C8O9FUoagnfRqW72nhv+s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cyGFG+JTbkZf/tWmLNsVvo+88tWhCh2/ybObboHAAPIRNqOjYTpIl2OpJr6agBCebMSFnyYDfAlU5QmlOFBYRiplbgzc8kXx9iHCkbUN4ZPlpLPqP8AXS6aieeOF+dN1pTRmXyU12ArjMajkkIt00/MK5A0PAh72DSm+GmhXxCU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=w7bPTg3V; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=YI8rjdwx; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=w7bPTg3V; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=YI8rjdwx; arc=none smtp.client-ip=195.135.223.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="w7bPTg3V"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="YI8rjdwx"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="w7bPTg3V"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="YI8rjdwx" Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id D75354D549; Tue, 31 Mar 2026 07:06:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774940760; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uzLtLqjxWRClqhR2bLCDjTKl4rcITvPBBsrVVdrHFZE=; b=w7bPTg3VYEOTo1c8j8hcDtKdSum9xcCNjwMsYbf6qN9w3Vvkq/q8G3oIlCR4HHgFrnQg2r Keannm9dwW6wszYavu4go5oKnEVEbo3tQ4naYs8Ope1xc9U0InYq1M0eComABl3/iDThWq ALJVSyJ1Bmk/kmH06ZpK+i8+xLVjs4c= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774940760; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uzLtLqjxWRClqhR2bLCDjTKl4rcITvPBBsrVVdrHFZE=; b=YI8rjdwxLUp7En7dspLKJbvbboUduit7B0cs7d29P2DlWzJoGxe2RNV4UzrtEoZJKv1UBA mRVqwKbs3ibj5EDg== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774940760; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uzLtLqjxWRClqhR2bLCDjTKl4rcITvPBBsrVVdrHFZE=; b=w7bPTg3VYEOTo1c8j8hcDtKdSum9xcCNjwMsYbf6qN9w3Vvkq/q8G3oIlCR4HHgFrnQg2r Keannm9dwW6wszYavu4go5oKnEVEbo3tQ4naYs8Ope1xc9U0InYq1M0eComABl3/iDThWq ALJVSyJ1Bmk/kmH06ZpK+i8+xLVjs4c= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774940760; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uzLtLqjxWRClqhR2bLCDjTKl4rcITvPBBsrVVdrHFZE=; b=YI8rjdwxLUp7En7dspLKJbvbboUduit7B0cs7d29P2DlWzJoGxe2RNV4UzrtEoZJKv1UBA mRVqwKbs3ibj5EDg== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id DF7064A0A2; Tue, 31 Mar 2026 07:05:56 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id aJPKJVRyy2mEQAAAD6G6ig (envelope-from ); Tue, 31 Mar 2026 07:05:56 +0000 From: David Disseldorp To: Andy Shevchenko , David Disseldorp , Petr Mladek , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Al Viro , Christian Brauner , Jan Kara , Steven Rostedt , Rasmus Villemoes , Sergey Senozhatsky , Andrew Morton Subject: [PATCH v5 3/6] initramfs: Sort headers alphabetically Date: Tue, 31 Mar 2026 17:57:33 +1100 Message-ID: <20260331070519.5974-4-ddiss@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260331070519.5974-1-ddiss@suse.de> References: <20260331070519.5974-1-ddiss@suse.de> 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 X-Spam-Score: -6.80 X-Spam-Level: X-Spamd-Result: default: False [-6.80 / 50.00]; REPLY(-4.00)[]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid,suse.de:email,intel.com:email]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCPT_COUNT_TWELVE(0.00)[12]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; R_RATELIMIT(0.00)[to_ip_from(RLg9cg5ahbkfmeaz1ygcd5onax)]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCVD_TLS_ALL(0.00)[] X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko Sorting headers alphabetically helps locating duplicates, and makes it easier to figure out where to insert new headers. Signed-off-by: Andy Shevchenko Reviewed-by: David Disseldorp --- init/initramfs.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/init/initramfs.c b/init/initramfs.c index 139baed06589a..4ed796566cf35 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -1,25 +1,25 @@ // SPDX-License-Identifier: GPL-2.0 -#include #include -#include -#include -#include -#include -#include #include -#include #include -#include -#include +#include +#include #include +#include +#include +#include #include #include #include #include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include =20 #include "do_mounts.h" #include "initramfs_internal.h" --=20 2.51.0 From nobody Wed Apr 1 12:34:28 2026 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (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 E3FD63BADBC for ; Tue, 31 Mar 2026 07:06:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940768; cv=none; b=ErYR6yhLQiM9juBobzuhcOAuM0Mi40cMi7cIL8SpkZ7avwRP4df/7aPx4YAfErwNj3T0fUuC02YqK5TakLwQ1LGcCJ3cnSqzTzkzh2x/F418ANSbDpGymbYCvp6aDXDm0PrO6//kX/v2NcJFA+pff08tZw16NgV/+zEQiyqPbMM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940768; c=relaxed/simple; bh=CdRTjobQteWp8YK55b49xdhgexe3tPqKB+Av8mYKE4U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X76gTeRkrgQZSXL/RORY+3/7GFYQaZRM7LBQqqUuNxl1W+kfIjUHZb8bRpRXbl7J8ugrpcIYE+fV7PqhzROg8mD5fB9e7rEopJ+85KU+/R+7sZeauF3ZmyqPApenUZzjzuATUewsQkbCzkY006j7lVi77cvlgmE/+WLEQtBo23s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; arc=none smtp.client-ip=195.135.223.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 5FB1F5BEA4; Tue, 31 Mar 2026 07:06:05 +0000 (UTC) Authentication-Results: smtp-out2.suse.de; none Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 68BE44A0A2; Tue, 31 Mar 2026 07:06:01 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id SLjTCFlyy2mEQAAAD6G6ig (envelope-from ); Tue, 31 Mar 2026 07:06:01 +0000 From: David Disseldorp To: Andy Shevchenko , David Disseldorp , Petr Mladek , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Al Viro , Christian Brauner , Jan Kara , Steven Rostedt , Rasmus Villemoes , Sergey Senozhatsky , Andrew Morton Subject: [PATCH v5 4/6] initramfs: Refactor to use hex2bin() instead of custom approach Date: Tue, 31 Mar 2026 17:57:34 +1100 Message-ID: <20260331070519.5974-5-ddiss@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260331070519.5974-1-ddiss@suse.de> References: <20260331070519.5974-1-ddiss@suse.de> 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 X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Queue-Id: 5FB1F5BEA4 X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Action: no action X-Spam-Score: -4.00 X-Spam-Level: X-Spam-Flag: NO X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Rspamd-Server: rspamd1.dmz-prg2.suse.org Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko There is a simple_strntoul() function used solely as a shortcut for hex2bin() with proper endianess conversions. Replace that and drop the unneeded function in the next changes. This implementation will abort if we fail to parse the cpio header, instead of using potentially bogus header values. Co-developed-by: David Disseldorp Signed-off-by: David Disseldorp Signed-off-by: Andy Shevchenko --- init/initramfs.c | 44 +++++++++++++++++++++++++------------------ init/initramfs_test.c | 24 ++++------------------- 2 files changed, 30 insertions(+), 38 deletions(-) diff --git a/init/initramfs.c b/init/initramfs.c index 4ed796566cf35..0d38ea8e63a29 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -21,6 +22,8 @@ #include #include =20 +#include + #include "do_mounts.h" #include "initramfs_internal.h" =20 @@ -190,26 +193,30 @@ static __initdata gid_t gid; static __initdata unsigned rdev; static __initdata u32 hdr_csum; =20 -static void __init parse_header(char *s) +static int __init parse_header(char *s) { - unsigned long parsed[13]; - int i; + __be32 header[13]; + int ret; =20 - for (i =3D 0, s +=3D 6; i < 13; i++, s +=3D 8) - parsed[i] =3D simple_strntoul(s, NULL, 16, 8); + ret =3D hex2bin((u8 *)header, s + 6, sizeof(header)); + if (ret) { + error("damaged header"); + return ret; + } =20 - ino =3D parsed[0]; - mode =3D parsed[1]; - uid =3D parsed[2]; - gid =3D parsed[3]; - nlink =3D parsed[4]; - mtime =3D parsed[5]; /* breaks in y2106 */ - body_len =3D parsed[6]; - major =3D parsed[7]; - minor =3D parsed[8]; - rdev =3D new_encode_dev(MKDEV(parsed[9], parsed[10])); - name_len =3D parsed[11]; - hdr_csum =3D parsed[12]; + ino =3D be32_to_cpu(header[0]); + mode =3D be32_to_cpu(header[1]); + uid =3D be32_to_cpu(header[2]); + gid =3D be32_to_cpu(header[3]); + nlink =3D be32_to_cpu(header[4]); + mtime =3D be32_to_cpu(header[5]); /* breaks in y2106 */ + body_len =3D be32_to_cpu(header[6]); + major =3D be32_to_cpu(header[7]); + minor =3D be32_to_cpu(header[8]); + rdev =3D new_encode_dev(MKDEV(be32_to_cpu(header[9]), be32_to_cpu(header[= 10]))); + name_len =3D be32_to_cpu(header[11]); + hdr_csum =3D be32_to_cpu(header[12]); + return 0; } =20 /* FSM */ @@ -289,7 +296,8 @@ static int __init do_header(void) error("no cpio magic"); return 1; } - parse_header(collected); + if (parse_header(collected)) + return 1; next_header =3D this_header + N_ALIGN(name_len) + body_len; next_header =3D (next_header + 3) & ~3; state =3D SkipIt; diff --git a/init/initramfs_test.c b/init/initramfs_test.c index b9f83dc194aa6..8a0ddc2db2c08 100644 --- a/init/initramfs_test.c +++ b/init/initramfs_test.c @@ -31,8 +31,8 @@ struct initramfs_test_cpio { #define CPIO_HDR_FMT "%s%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%0= 8x%s" /* * Bogus newc header with "0x" prefixes on the uid, gid, and namesize valu= es. - * parse_header()/simple_str[n]toul() accept this, contrary to the initram= fs - * specification. + * parse_header()/simple_str[n]toul() accepted this, contrary to the initr= amfs + * specification. hex2bin() now fails. */ #define CPIO_HDR_OX_INJECT \ "%s%08x%08x0x%06x0X%06x%08x%08x%08x%08x%08x%08x%08x0x%06x%08x%s" @@ -508,8 +508,7 @@ static void __init initramfs_test_hdr_hex(struct kunit = *test) { char *err; size_t len; - struct kstat st0 =3D {}, st1 =3D {}; - char fdata[] =3D "this file data will be unpacked"; + char fdata[] =3D "this file data will not be unpacked"; struct initramfs_test_bufs { char cpio_src[(CPIO_HDRLEN + PATH_MAX + 3 + sizeof(fdata)) * 2]; } *tbufs =3D kzalloc(sizeof(struct initramfs_test_bufs), GFP_KERNEL); @@ -539,22 +538,7 @@ static void __init initramfs_test_hdr_hex(struct kunit= *test) len =3D fill_cpio(c, ARRAY_SIZE(c), true, tbufs->cpio_src); =20 err =3D unpack_to_rootfs(tbufs->cpio_src, len); - KUNIT_EXPECT_NULL(test, err); - - KUNIT_EXPECT_EQ(test, init_stat(c[0].fname, &st0, 0), 0); - KUNIT_EXPECT_EQ(test, init_stat(c[1].fname, &st1, 0), 0); - - KUNIT_EXPECT_TRUE(test, - uid_eq(st0.uid, make_kuid(current_user_ns(), (uid_t)0x123456))); - KUNIT_EXPECT_TRUE(test, - gid_eq(st0.gid, make_kgid(current_user_ns(), (gid_t)0x123457))); - KUNIT_EXPECT_TRUE(test, - uid_eq(st1.uid, make_kuid(current_user_ns(), (uid_t)0x56))); - KUNIT_EXPECT_TRUE(test, - gid_eq(st1.gid, make_kgid(current_user_ns(), (gid_t)0x57))); - - KUNIT_EXPECT_EQ(test, init_unlink(c[0].fname), 0); - KUNIT_EXPECT_EQ(test, init_rmdir(c[1].fname), 0); + KUNIT_EXPECT_NOT_NULL(test, err); =20 kfree(tbufs); } --=20 2.51.0 From nobody Wed Apr 1 12:34:28 2026 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (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 4A0433BD63A for ; Tue, 31 Mar 2026 07:06:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940772; cv=none; b=jmeDAlZOAB0K4L6PQiz2CN8uIIccxilX4PHIXCVe510EfcY/6dNNbKYaHZKweBQPoIMMNGQh5v1OzQD7exV3RMwY5MisQPm5uXBApkBYOaahlaszYxui/LoGj4XJUPmrwx/MmSs0hR92ZdVBZLahU5YghlsXA2o7GKRBUIG7bqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940772; c=relaxed/simple; bh=ao2Xi9Wl17PViMKf6WGBjsNBt7xhaL8Ei3caE2OL2JE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bxKZ6xK1MmPGb2612SIGLOrpvQ2+U7XAyjsM1YavELt8ICIz/A9CUUOcqPCwvbcSUUgICVGc2vRKZAYXwXdEmZFvNShpUiNo5cxLebKJJZ8tpmdgBCORka2XbOuqSOB0m1aQYNI1ga+OILgm37HxTsEMcr7OY8k96m8QsL9vN14= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; arc=none smtp.client-ip=195.135.223.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id DDEDA4D549; Tue, 31 Mar 2026 07:06:09 +0000 (UTC) Authentication-Results: smtp-out1.suse.de; none Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id E5CBE4A0A2; Tue, 31 Mar 2026 07:06:05 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id aKwoJ11yy2mEQAAAD6G6ig (envelope-from ); Tue, 31 Mar 2026 07:06:05 +0000 From: David Disseldorp To: Andy Shevchenko , David Disseldorp , Petr Mladek , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Al Viro , Christian Brauner , Jan Kara , Steven Rostedt , Rasmus Villemoes , Sergey Senozhatsky , Andrew Morton Subject: [PATCH v5 5/6] vsprintf: Revert "add simple_strntoul" Date: Tue, 31 Mar 2026 17:57:35 +1100 Message-ID: <20260331070519.5974-6-ddiss@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260331070519.5974-1-ddiss@suse.de> References: <20260331070519.5974-1-ddiss@suse.de> 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 X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Queue-Id: DDEDA4D549 X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Action: no action X-Spam-Score: -4.00 X-Spam-Level: X-Spam-Flag: NO X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Rspamd-Server: rspamd1.dmz-prg2.suse.org Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko No users anymore and none should be in the first place. This reverts commit fcc155008a20fa31b01569e105250490750f0687. Signed-off-by: Andy Shevchenko Reviewed-by: David Disseldorp Acked-by: Petr Mladek --- include/linux/kstrtox.h | 1 - lib/vsprintf.c | 7 ------- 2 files changed, 8 deletions(-) diff --git a/include/linux/kstrtox.h b/include/linux/kstrtox.h index 6ea897222af1d..7fcf29a4e0de4 100644 --- a/include/linux/kstrtox.h +++ b/include/linux/kstrtox.h @@ -143,7 +143,6 @@ static inline int __must_check kstrtos32_from_user(cons= t char __user *s, size_t */ =20 extern unsigned long simple_strtoul(const char *,char **,unsigned int); -extern unsigned long simple_strntoul(const char *,char **,unsigned int,siz= e_t); extern long simple_strtol(const char *,char **,unsigned int); extern unsigned long long simple_strtoull(const char *,char **,unsigned in= t); extern long long simple_strtoll(const char *,char **,unsigned int); diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 800b8ac49f53f..52ea14a08d3a5 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -129,13 +129,6 @@ unsigned long simple_strtoul(const char *cp, char **en= dp, unsigned int base) } EXPORT_SYMBOL(simple_strtoul); =20 -unsigned long simple_strntoul(const char *cp, char **endp, unsigned int ba= se, - size_t max_chars) -{ - return simple_strntoull(cp, endp, base, max_chars); -} -EXPORT_SYMBOL(simple_strntoul); - /** * simple_strtol - convert a string to a signed long * @cp: The start of the string --=20 2.51.0 From nobody Wed Apr 1 12:34:28 2026 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (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 309903B4E9B for ; Tue, 31 Mar 2026 07:06:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940777; cv=none; b=Trqtes7sHNvdvht3TqLbm4kEnoSZETaksACR/9CQ2baCS2ZxuJY6/VipPvfQqCstVAbes/s5Xpe0YR9BOOVqw11M1AM/BGxglAAHGxLvALl8l1tu66yW53X1JlYSHQoYf0yK7oMki5o7atgyFRd1KILIOGvNYUqT9EWBwYZaDYQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774940777; c=relaxed/simple; bh=NtdlBhQV2VlxX2h7MdXsFGBQD9aeOUTYJysty5gVNJ4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=D8UpedTWApm40EGqK0jyMeZTnjXwDlIQayDtwNjCFkEbf0GssCy951gyTYt2xTAJ6zbvFWdcQnVx0qnys0sa5zDXb6NLYDbIx53uWHZCmbVyXy6yOMa6WSc1wy37VGhvEjUCGuurtERP+Zh+DwUUoEJWKUVdEqufTXM/ffwENEE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=AqtJWMZg; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=tY6A6sTF; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=AqtJWMZg; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=tY6A6sTF; arc=none smtp.client-ip=195.135.223.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="AqtJWMZg"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="tY6A6sTF"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="AqtJWMZg"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="tY6A6sTF" Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 67FA35BEA1; Tue, 31 Mar 2026 07:06:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774940774; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mEicmogugLQP8Anuvmh2pN9+lvV3u9p8yS4Cd/a0rew=; b=AqtJWMZg7+Pb0YUcBN8kqA1oFNrK/3TpfltakkUCRr+N2fDp12jWM0y7t5W3CABS6f50JH eyqbJMW7BmaA5t7cp/OkSqcDwH9Ib43WQi/bfLtNF/UcqCOw7HybSZz1x+O9ZPZ7o4LZHM PLhpecl1/p7Z1n0qJRW61RcL/MON+Ew= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774940774; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mEicmogugLQP8Anuvmh2pN9+lvV3u9p8yS4Cd/a0rew=; b=tY6A6sTF/Qu7fhbW0+sOY8thP+TiaRnXF8ayLD1ssCzLfg93hlaZcjsGCQFdGlWZznSRLS /2YS0oBKVcJHgUCw== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774940774; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mEicmogugLQP8Anuvmh2pN9+lvV3u9p8yS4Cd/a0rew=; b=AqtJWMZg7+Pb0YUcBN8kqA1oFNrK/3TpfltakkUCRr+N2fDp12jWM0y7t5W3CABS6f50JH eyqbJMW7BmaA5t7cp/OkSqcDwH9Ib43WQi/bfLtNF/UcqCOw7HybSZz1x+O9ZPZ7o4LZHM PLhpecl1/p7Z1n0qJRW61RcL/MON+Ew= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774940774; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mEicmogugLQP8Anuvmh2pN9+lvV3u9p8yS4Cd/a0rew=; b=tY6A6sTF/Qu7fhbW0+sOY8thP+TiaRnXF8ayLD1ssCzLfg93hlaZcjsGCQFdGlWZznSRLS /2YS0oBKVcJHgUCw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 6F68F4A0A2; Tue, 31 Mar 2026 07:06:10 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id uI1VCmJyy2mEQAAAD6G6ig (envelope-from ); Tue, 31 Mar 2026 07:06:10 +0000 From: David Disseldorp To: Andy Shevchenko , David Disseldorp , Petr Mladek , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Al Viro , Christian Brauner , Jan Kara , Steven Rostedt , Rasmus Villemoes , Sergey Senozhatsky , Andrew Morton Subject: [PATCH v5 6/6] kstrtox: Drop extern keyword in the simple_strtox() declarations Date: Tue, 31 Mar 2026 17:57:36 +1100 Message-ID: <20260331070519.5974-7-ddiss@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260331070519.5974-1-ddiss@suse.de> References: <20260331070519.5974-1-ddiss@suse.de> 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 X-Spamd-Result: default: False [-6.80 / 50.00]; REPLY(-4.00)[]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email,imap1.dmz-prg2.suse.org:helo,intel.com:email]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCPT_COUNT_TWELVE(0.00)[12]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; R_RATELIMIT(0.00)[to_ip_from(RLg9cg5ahbkfmeaz1ygcd5onax)]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCVD_TLS_ALL(0.00)[] X-Spam-Flag: NO X-Spam-Score: -6.80 X-Spam-Level: Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko There is legacy 'extern' keyword for the exported simple_strtox() function which are the artefact that can be removed. So drop it. While at it, tweak the declaration to provide parameter names. Signed-off-by: Andy Shevchenko Reviewed-by: David Disseldorp Reviewed-by: Petr Mladek --- include/linux/kstrtox.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/linux/kstrtox.h b/include/linux/kstrtox.h index 7fcf29a4e0de4..6c92828667704 100644 --- a/include/linux/kstrtox.h +++ b/include/linux/kstrtox.h @@ -142,9 +142,9 @@ static inline int __must_check kstrtos32_from_user(cons= t char __user *s, size_t * Keep in mind above caveat. */ =20 -extern unsigned long simple_strtoul(const char *,char **,unsigned int); -extern long simple_strtol(const char *,char **,unsigned int); -extern unsigned long long simple_strtoull(const char *,char **,unsigned in= t); -extern long long simple_strtoll(const char *,char **,unsigned int); +unsigned long simple_strtoul(const char *cp, char **endp, unsigned int bas= e); +long simple_strtol(const char *cp, char **endp, unsigned int base); +unsigned long long simple_strtoull(const char *cp, char **endp, unsigned i= nt base); +long long simple_strtoll(const char *cp, char **endp, unsigned int base); =20 #endif /* _LINUX_KSTRTOX_H */ --=20 2.51.0