Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

initramfs_test: kunit test for cpio.filesize > PATH_MAX

initramfs unpack skips over cpio entries where namesize > PATH_MAX,
instead of returning an error. Add coverage for this behaviour.

Signed-off-by: David Disseldorp <ddiss@suse.de>
Link: https://patch.msgid.link/20260114135051.4943-2-ddiss@suse.de
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

David Disseldorp and committed by
Christian Brauner
aaf76839 7c022500

+48
+48
init/initramfs_test.c
··· 447 447 kfree(tbufs); 448 448 } 449 449 450 + static void __init initramfs_test_fname_path_max(struct kunit *test) 451 + { 452 + char *err; 453 + size_t len; 454 + struct kstat st0, st1; 455 + char fdata[] = "this file data will not be unpacked"; 456 + struct test_fname_path_max { 457 + char fname_oversize[PATH_MAX + 1]; 458 + char fname_ok[PATH_MAX]; 459 + char cpio_src[(CPIO_HDRLEN + PATH_MAX + 3 + sizeof(fdata)) * 2]; 460 + } *tbufs = kzalloc(sizeof(struct test_fname_path_max), GFP_KERNEL); 461 + struct initramfs_test_cpio c[] = { { 462 + .magic = "070701", 463 + .ino = 1, 464 + .mode = S_IFDIR | 0777, 465 + .nlink = 1, 466 + .namesize = sizeof(tbufs->fname_oversize), 467 + .fname = tbufs->fname_oversize, 468 + .filesize = sizeof(fdata), 469 + .data = fdata, 470 + }, { 471 + .magic = "070701", 472 + .ino = 2, 473 + .mode = S_IFDIR | 0777, 474 + .nlink = 1, 475 + .namesize = sizeof(tbufs->fname_ok), 476 + .fname = tbufs->fname_ok, 477 + } }; 478 + 479 + memset(tbufs->fname_oversize, '/', sizeof(tbufs->fname_oversize) - 1); 480 + memset(tbufs->fname_ok, '/', sizeof(tbufs->fname_ok) - 1); 481 + memcpy(tbufs->fname_oversize, "fname_oversize", 482 + sizeof("fname_oversize") - 1); 483 + memcpy(tbufs->fname_ok, "fname_ok", sizeof("fname_ok") - 1); 484 + len = fill_cpio(c, ARRAY_SIZE(c), tbufs->cpio_src); 485 + 486 + /* unpack skips over fname_oversize instead of returning an error */ 487 + err = unpack_to_rootfs(tbufs->cpio_src, len); 488 + KUNIT_EXPECT_NULL(test, err); 489 + 490 + KUNIT_EXPECT_EQ(test, init_stat("fname_oversize", &st0, 0), -ENOENT); 491 + KUNIT_EXPECT_EQ(test, init_stat("fname_ok", &st1, 0), 0); 492 + KUNIT_EXPECT_EQ(test, init_rmdir("fname_ok"), 0); 493 + 494 + kfree(tbufs); 495 + } 496 + 450 497 /* 451 498 * The kunit_case/_suite struct cannot be marked as __initdata as this will be 452 499 * used in debugfs to retrieve results after test has run. ··· 506 459 KUNIT_CASE(initramfs_test_hardlink), 507 460 KUNIT_CASE(initramfs_test_many), 508 461 KUNIT_CASE(initramfs_test_fname_pad), 462 + KUNIT_CASE(initramfs_test_fname_path_max), 509 463 {}, 510 464 }; 511 465