On Fri, Sep 11, 2026 at 5:59 AM Christian Brauner <[email protected]> wrote: > > The KUnit test suite turned insert_extent() and sort_idmaps() into global > symbols and declared them in include/linux/user_namespace.h. That header > is pulled in nearly everywhere through linux/cgroup.h and the btrfs > self-tests carry a static insert_extent() of their own, so any config > with both test suites enabled fails to build: > > fs/btrfs/tests/inode-tests.c:16:13: error: conflicting types for > 'insert_extent' > include/linux/user_namespace.h:212:12: note: previous declaration of > 'insert_extent' > > A global symbol needs a prefix. Rename them to > uid_gid_map_insert_extent() and uid_gid_map_sort(). It's the better name > anyway. > > No functional changes. > > Fixes: f6f1a2496ba5 ("userns: Add KUnit test suite for uid_gid_map") > Reported-by: kernel test robot <[email protected]> > Closes: > https://lore.kernel.org/oe-kbuild-all/[email protected]/ > Closes: > https://lore.kernel.org/oe-kbuild-all/[email protected]/ > Signed-off-by: Christian Brauner (Amutable) <[email protected]>
Apologies for this. This version of the KUnit testing is susceptible to exposting duplicate symbols. :-( Reviewed-by: Bill Wendling <[email protected]> -bw > --- > include/linux/user_namespace.h | 5 +++-- > kernel/tests/user_ns_map_kunit.c | 6 +++--- > kernel/user_namespace.c | 19 ++++++++++--------- > 3 files changed, 16 insertions(+), 14 deletions(-) > > diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h > index 633157781edc..637cd7e91a45 100644 > --- a/include/linux/user_namespace.h > +++ b/include/linux/user_namespace.h > @@ -209,8 +209,9 @@ extern bool current_in_userns(const struct user_namespace > *target_ns); > struct ns_common *ns_get_owner(struct ns_common *ns); > > #if IS_ENABLED(CONFIG_USER_NS_MAP_KUNIT_TEST) > -extern int insert_extent(struct uid_gid_map *map, struct uid_gid_extent > *extent); > -extern int sort_idmaps(struct uid_gid_map *map); > +extern int uid_gid_map_insert_extent(struct uid_gid_map *map, > + struct uid_gid_extent *extent); > +extern int uid_gid_map_sort(struct uid_gid_map *map); > #endif /* CONFIG_USER_NS_MAP_KUNIT_TEST */ > > #else > diff --git a/kernel/tests/user_ns_map_kunit.c > b/kernel/tests/user_ns_map_kunit.c > index 24c21e43a36c..033dccc6a535 100644 > --- a/kernel/tests/user_ns_map_kunit.c > +++ b/kernel/tests/user_ns_map_kunit.c > @@ -24,7 +24,7 @@ static void user_ns_map_insert(struct kunit *test) > extent.lower_first = i * 100; > extent.count = 5; > > - ret = insert_extent(&map, &extent); > + ret = uid_gid_map_insert_extent(&map, &extent); > KUNIT_ASSERT_EQ(test, ret, 0); > } > > @@ -54,14 +54,14 @@ static void user_ns_map_insert_extended(struct kunit > *test) > extent.lower_first = value * 100; > extent.count = 5; > > - ret = insert_extent(&map, &extent); > + ret = uid_gid_map_insert_extent(&map, &extent); > KUNIT_ASSERT_EQ(test, ret, 0); > } > > KUNIT_EXPECT_EQ(test, map.nr_extents, NR_EXTENTS); > > /* Now sort the map to set up reverse mapping */ > - ret = sort_idmaps(&map); > + ret = uid_gid_map_sort(&map); > KUNIT_ASSERT_EQ(test, ret, 0); > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, map.reverse); > > diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c > index f9cbb4b92b48..98b0279b6cc6 100644 > --- a/kernel/user_namespace.c > +++ b/kernel/user_namespace.c > @@ -780,12 +780,13 @@ static bool mappings_overlap(struct uid_gid_map > *new_map, > } > > /* > - * insert_extent - Safely insert a new idmap extent into struct uid_gid_map. > + * uid_gid_map_insert_extent - Safely insert a new idmap extent into > + * struct uid_gid_map. > * Takes care to allocate a 4K block of memory if the number of mappings > exceeds > * UID_GID_MAP_MAX_BASE_EXTENTS. > */ > -VISIBLE_IF_KUNIT int insert_extent(struct uid_gid_map *map, > - struct uid_gid_extent *extent) > +VISIBLE_IF_KUNIT int uid_gid_map_insert_extent(struct uid_gid_map *map, > + struct uid_gid_extent *extent) > { > struct uid_gid_extent *dest; > > @@ -821,7 +822,7 @@ VISIBLE_IF_KUNIT int insert_extent(struct uid_gid_map > *map, > *dest = *extent; > return 0; > } > -EXPORT_SYMBOL_IF_KUNIT(insert_extent); > +EXPORT_SYMBOL_IF_KUNIT(uid_gid_map_insert_extent); > > /* cmp function to sort() forward mappings */ > static int cmp_extents_forward(const void *a, const void *b) > @@ -854,10 +855,10 @@ static int cmp_extents_reverse(const void *a, const > void *b) > } > > /* > - * sort_idmaps - Sorts an array of idmap entries. > + * uid_gid_map_sort - Sorts an array of idmap entries. > * Can only be called if number of mappings exceeds > UID_GID_MAP_MAX_BASE_EXTENTS. > */ > -VISIBLE_IF_KUNIT int sort_idmaps(struct uid_gid_map *map) > +VISIBLE_IF_KUNIT int uid_gid_map_sort(struct uid_gid_map *map) > { > if (map->nr_extents <= UID_GID_MAP_MAX_BASE_EXTENTS) > return 0; > @@ -878,7 +879,7 @@ VISIBLE_IF_KUNIT int sort_idmaps(struct uid_gid_map *map) > > return 0; > } > -EXPORT_SYMBOL_IF_KUNIT(sort_idmaps); > +EXPORT_SYMBOL_IF_KUNIT(uid_gid_map_sort); > > /** > * verify_root_map() - check the uid 0 mapping > @@ -1047,7 +1048,7 @@ static ssize_t map_write(struct file *file, const char > __user *buf, > (next_line != NULL)) > goto out; > > - ret = insert_extent(&new_map, &extent); > + ret = uid_gid_map_insert_extent(&new_map, &extent); > if (ret < 0) > goto out; > ret = -EINVAL; > @@ -1091,7 +1092,7 @@ static ssize_t map_write(struct file *file, const char > __user *buf, > * If we want to use binary search for lookup, this clones the extent > * array and sorts both copies. > */ > - ret = sort_idmaps(&new_map); > + ret = uid_gid_map_sort(&new_map); > if (ret < 0) > goto out; > > -- > 2.53.0 >

