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
>

Reply via email to