On Sun, Aug 23, 2026 at 12:51:48PM +0000, Bill Wendling wrote:
> Add a KUnit test suite to verify the insertion and sorting of mappings
> in struct uid_gid_map. This test suite validates both base extent
> insertion (<= 5 mappings) and extended extent insertion (> 5 mappings,
> which triggers the allocation of the forward and reverse pointers).
> 
> This is especially useful for verifying that the __counted_by_ptr
> attribute added to 'forward' and 'reverse' pointers works correctly
> without causing any runtime bounds-checking panics or traps.

AFAIU patch 1 is supposed to not change any behavior.
You could move the unit test to the front to make that clearer
and also validate it.

> Assisted-by: Gemini Next
> Change-Id: If0c2c197a35cd7429cf0d2d6e3b33f0d9f0be66c

Change-Id should not be used upstream.
See Documentation/dev-tools/checkpatch.rst.

> Signed-off-by: Bill Wendling <[email protected]>
> ---
> Cc: Kees Cook <[email protected]>
> Cc: "Gustavo A. R. Silva" <[email protected]>
> Cc: Christian Brauner <[email protected]>
> Cc: Aleksa Sarai <[email protected]>
> Cc: Jan Kara <[email protected]>
> Cc: Nathan Chancellor <[email protected]>
> Cc: Miguel Ojeda <[email protected]>
> Cc: Thomas Gleixner <[email protected]>
> Cc: Nicolas Schier <[email protected]>
> Cc: Gary Guo <[email protected]>
> Cc: "Thomas Weißschuh" <[email protected]>
> Cc: Alice Ryhl <[email protected]>
> Cc: Douglas Anderson <[email protected]>
> Cc: Anand Moon <[email protected]>
> Cc: Oleg Nesterov <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> ---
>  init/Kconfig                  | 10 ++++
>  kernel/.kunitconfig           |  3 ++
>  kernel/user_namespace.c       |  4 ++
>  kernel/user_namespace_kunit.c | 87 +++++++++++++++++++++++++++++++++++
>  4 files changed, 104 insertions(+)
>  create mode 100644 kernel/.kunitconfig
>  create mode 100644 kernel/user_namespace_kunit.c

(...)

> +static void test_user_ns_map_insert_extended(struct kunit *test)
> +{
> +     struct uid_gid_map map;
> +     struct uid_gid_extent extent;
> +     int i, ret;

(...)

> +     /* Now sort the map to set up reverse mapping */
> +     ret = sort_idmaps(&map);
> +     KUNIT_EXPECT_EQ(test, ret, 0);
> +     KUNIT_EXPECT_NOT_ERR_OR_NULL(test, map.reverse);

KUNIT_EXPECT_*() will *not* abort the test when the assertion fails ...

> +
> +     /* Verify sorting is correct */
> +     for (i = 0; i < map.nr_extents; i++) {
> +             KUNIT_EXPECT_EQ(test, map.forward[i].count, 5);
> +             KUNIT_EXPECT_EQ(test, map.reverse[i].count, 5);

... leading to a crash here if map.reverse is invalid.

To also abort the test on assertion failure use KUNIT_ASSERT_*().

> +     }
> +
> +     /* Clean up allocations to avoid leaks */

Pointless comment. This is true for every single call of kfree().

> +     kfree(map.forward);
> +     kfree(map.reverse);
> +}

(...)

Reply via email to