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 |
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 --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) {
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(+)