diff mbox series

[1/2] smb: client: set correct id, uid and cruid for multiuser automounts

Message ID 20240211231931.185193-1-pc@manguebit.com
State New
Headers show
Series [1/2] smb: client: set correct id, uid and cruid for multiuser automounts | expand

Commit Message

Paulo Alcantara Feb. 11, 2024, 11:19 p.m. UTC
When uid, gid and cruid are not specified, we need to set dynamically
set them into the filesystem context used for automounting otherwise
they'll end up reusing the values from the parent mount.

Fixes: 9fd29a5bae6e ("cifs: use fs_context for automounts")
Reported-by: Shane Nehring <snehring@iastate.edu>
Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2259257
Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
---
 fs/smb/client/namespace.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Steve French Feb. 12, 2024, 3:06 a.m. UTC | #1
tentatively merged these two into cifs-2.6.git for-next pending review
and testing

On Sun, Feb 11, 2024 at 5:20 PM Paulo Alcantara <pc@manguebit.com> wrote:
>
> When uid, gid and cruid are not specified, we need to set dynamically
> set them into the filesystem context used for automounting otherwise
> they'll end up reusing the values from the parent mount.
>
> Fixes: 9fd29a5bae6e ("cifs: use fs_context for automounts")
> Reported-by: Shane Nehring <snehring@iastate.edu>
> Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2259257
> Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
> ---
>  fs/smb/client/namespace.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
>
> diff --git a/fs/smb/client/namespace.c b/fs/smb/client/namespace.c
> index a6968573b775..4a517b280f2b 100644
> --- a/fs/smb/client/namespace.c
> +++ b/fs/smb/client/namespace.c
> @@ -168,6 +168,21 @@ static char *automount_fullpath(struct dentry *dentry, void *page)
>         return s;
>  }
>
> +static void fs_context_set_ids(struct smb3_fs_context *ctx)
> +{
> +       kuid_t uid = current_fsuid();
> +       kgid_t gid = current_fsgid();
> +
> +       if (ctx->multiuser) {
> +               if (!ctx->uid_specified)
> +                       ctx->linux_uid = uid;
> +               if (!ctx->gid_specified)
> +                       ctx->linux_gid = gid;
> +       }
> +       if (!ctx->cruid_specified)
> +               ctx->cred_uid = uid;
> +}
> +
>  /*
>   * Create a vfsmount that we can automount
>   */
> @@ -205,6 +220,7 @@ static struct vfsmount *cifs_do_automount(struct path *path)
>         tmp.leaf_fullpath = NULL;
>         tmp.UNC = tmp.prepath = NULL;
>         tmp.dfs_root_ses = NULL;
> +       fs_context_set_ids(&tmp);
>
>         rc = smb3_fs_context_dup(ctx, &tmp);
>         if (rc) {
> --
> 2.43.0
>
diff mbox series

Patch

diff --git a/fs/smb/client/namespace.c b/fs/smb/client/namespace.c
index a6968573b775..4a517b280f2b 100644
--- a/fs/smb/client/namespace.c
+++ b/fs/smb/client/namespace.c
@@ -168,6 +168,21 @@  static char *automount_fullpath(struct dentry *dentry, void *page)
 	return s;
 }
 
+static void fs_context_set_ids(struct smb3_fs_context *ctx)
+{
+	kuid_t uid = current_fsuid();
+	kgid_t gid = current_fsgid();
+
+	if (ctx->multiuser) {
+		if (!ctx->uid_specified)
+			ctx->linux_uid = uid;
+		if (!ctx->gid_specified)
+			ctx->linux_gid = gid;
+	}
+	if (!ctx->cruid_specified)
+		ctx->cred_uid = uid;
+}
+
 /*
  * Create a vfsmount that we can automount
  */
@@ -205,6 +220,7 @@  static struct vfsmount *cifs_do_automount(struct path *path)
 	tmp.leaf_fullpath = NULL;
 	tmp.UNC = tmp.prepath = NULL;
 	tmp.dfs_root_ses = NULL;
+	fs_context_set_ids(&tmp);
 
 	rc = smb3_fs_context_dup(ctx, &tmp);
 	if (rc) {