summaryrefslogtreecommitdiff
path: root/init/initramfs_test.c
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2026-03-31 17:57:34 +1100
committerChristian Brauner <brauner@kernel.org>2026-05-21 09:32:46 +0200
commitec03d259f67bab506dc176a661210a3ee15e31b6 (patch)
tree6e7054fb358812421f70b8417c11bbec1957d5e0 /init/initramfs_test.c
parenta4d6170e86c72fad45257e189bbd901f64dfb40a (diff)
initramfs: Refactor to use hex2bin() instead of custom approach
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 <ddiss@suse.de> Signed-off-by: David Disseldorp <ddiss@suse.de> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://patch.msgid.link/20260331070519.5974-5-ddiss@suse.de Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'init/initramfs_test.c')
-rw-r--r--init/initramfs_test.c24
1 files changed, 4 insertions, 20 deletions
diff --git a/init/initramfs_test.c b/init/initramfs_test.c
index b9f83dc194aa..8a0ddc2db2c0 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%08x%s"
/*
* Bogus newc header with "0x" prefixes on the uid, gid, and namesize values.
- * parse_header()/simple_str[n]toul() accept this, contrary to the initramfs
- * specification.
+ * parse_header()/simple_str[n]toul() accepted this, contrary to the initramfs
+ * 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 = {}, st1 = {};
- char fdata[] = "this file data will be unpacked";
+ char fdata[] = "this file data will not be unpacked";
struct initramfs_test_bufs {
char cpio_src[(CPIO_HDRLEN + PATH_MAX + 3 + sizeof(fdata)) * 2];
} *tbufs = kzalloc(sizeof(struct initramfs_test_bufs), GFP_KERNEL);
@@ -539,22 +538,7 @@ static void __init initramfs_test_hdr_hex(struct kunit *test)
len = fill_cpio(c, ARRAY_SIZE(c), true, tbufs->cpio_src);
err = 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);
kfree(tbufs);
}