lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAEivzxfqT7OSNK-1y6az6DTHf8enD3xMJbdAVjQjO7JOj+z80A@mail.gmail.com>
Date: Mon, 23 Sep 2024 10:37:54 +0200
From: Aleksandr Mikhalitsyn <aleksandr.mikhalitsyn@...onical.com>
To: mszeredi@...hat.com
Cc: linux-kernel@...r.kernel.org
Subject: Re: [PATCH v1 2/3] fs/mnt_idmapping: introduce an invalid_mnt_idmap

Gentle ping :)

On Fri, Sep 6, 2024 at 4:35 PM Alexander Mikhalitsyn
<aleksandr.mikhalitsyn@...onical.com> wrote:
>
> Link: https://lore.kernel.org/linux-fsdevel/20240904-baugrube-erhoben-b3c1c49a2645@brauner/
> Suggested-by: Christian Brauner <brauner@...nel.org>
> Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@...onical.com>
> ---
>  fs/mnt_idmapping.c            | 22 ++++++++++++++++++++--
>  include/linux/mnt_idmapping.h |  1 +
>  2 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
> index 3c60f1eaca61..cbca6500848e 100644
> --- a/fs/mnt_idmapping.c
> +++ b/fs/mnt_idmapping.c
> @@ -32,6 +32,15 @@ struct mnt_idmap nop_mnt_idmap = {
>  };
>  EXPORT_SYMBOL_GPL(nop_mnt_idmap);
>
> +/*
> + * Carries the invalid idmapping of a full 0-4294967295 {g,u}id range.
> + * This means that all {g,u}ids are mapped to INVALID_VFS{G,U}ID.
> + */
> +struct mnt_idmap invalid_mnt_idmap = {
> +       .count  = REFCOUNT_INIT(1),
> +};
> +EXPORT_SYMBOL_GPL(invalid_mnt_idmap);
> +
>  /**
>   * initial_idmapping - check whether this is the initial mapping
>   * @ns: idmapping to check
> @@ -75,6 +84,8 @@ vfsuid_t make_vfsuid(struct mnt_idmap *idmap,
>
>         if (idmap == &nop_mnt_idmap)
>                 return VFSUIDT_INIT(kuid);
> +       if (idmap == &invalid_mnt_idmap)
> +               return INVALID_VFSUID;
>         if (initial_idmapping(fs_userns))
>                 uid = __kuid_val(kuid);
>         else
> @@ -112,6 +123,8 @@ vfsgid_t make_vfsgid(struct mnt_idmap *idmap,
>
>         if (idmap == &nop_mnt_idmap)
>                 return VFSGIDT_INIT(kgid);
> +       if (idmap == &invalid_mnt_idmap)
> +               return INVALID_VFSGID;
>         if (initial_idmapping(fs_userns))
>                 gid = __kgid_val(kgid);
>         else
> @@ -140,6 +153,8 @@ kuid_t from_vfsuid(struct mnt_idmap *idmap,
>
>         if (idmap == &nop_mnt_idmap)
>                 return AS_KUIDT(vfsuid);
> +       if (idmap == &invalid_mnt_idmap)
> +               return INVALID_UID;
>         uid = map_id_up(&idmap->uid_map, __vfsuid_val(vfsuid));
>         if (uid == (uid_t)-1)
>                 return INVALID_UID;
> @@ -167,6 +182,8 @@ kgid_t from_vfsgid(struct mnt_idmap *idmap,
>
>         if (idmap == &nop_mnt_idmap)
>                 return AS_KGIDT(vfsgid);
> +       if (idmap == &invalid_mnt_idmap)
> +               return INVALID_GID;
>         gid = map_id_up(&idmap->gid_map, __vfsgid_val(vfsgid));
>         if (gid == (gid_t)-1)
>                 return INVALID_GID;
> @@ -296,7 +313,7 @@ struct mnt_idmap *alloc_mnt_idmap(struct user_namespace *mnt_userns)
>   */
>  struct mnt_idmap *mnt_idmap_get(struct mnt_idmap *idmap)
>  {
> -       if (idmap != &nop_mnt_idmap)
> +       if (idmap != &nop_mnt_idmap && idmap != &invalid_mnt_idmap)
>                 refcount_inc(&idmap->count);
>
>         return idmap;
> @@ -312,7 +329,8 @@ EXPORT_SYMBOL_GPL(mnt_idmap_get);
>   */
>  void mnt_idmap_put(struct mnt_idmap *idmap)
>  {
> -       if (idmap != &nop_mnt_idmap && refcount_dec_and_test(&idmap->count))
> +       if (idmap != &nop_mnt_idmap && idmap != &invalid_mnt_idmap &&
> +           refcount_dec_and_test(&idmap->count))
>                 free_mnt_idmap(idmap);
>  }
>  EXPORT_SYMBOL_GPL(mnt_idmap_put);
> diff --git a/include/linux/mnt_idmapping.h b/include/linux/mnt_idmapping.h
> index cd4d5c8781f5..b1b219bc3422 100644
> --- a/include/linux/mnt_idmapping.h
> +++ b/include/linux/mnt_idmapping.h
> @@ -9,6 +9,7 @@ struct mnt_idmap;
>  struct user_namespace;
>
>  extern struct mnt_idmap nop_mnt_idmap;
> +extern struct mnt_idmap invalid_mnt_idmap;
>  extern struct user_namespace init_user_ns;
>
>  typedef struct {
> --
> 2.34.1
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ