mirror of
https://github.com/torvalds/linux.git
synced 2026-09-11 20:13:02 +02:00
smb: client: fix uid/gid override in getattr with posix extensions
When mounting with 'multiuser,posix' options, cifs_getattr() overrides the server-provided uid/gid with the current process's fsuid/fsgid. This is because the condition only checks for unix extensions (tcon->unix_ext) but not posix extensions (tcon->posix_extensions). With SMB3 POSIX extensions, the server provides real uid/gid values just like with unix extensions, so they should be preserved rather than replaced with the caller's credentials. Add a tcon->posix_extensions check to the condition so that uid/gid from the server are properly reported in stat results. Reported-by: Arthur Lesuisse <arthur.lesuisse@ulb.be> Closes: https://lore.kernel.org/r/DB9P190MB2012266F6B8DECBE5D26A1798DB52@DB9P190MB2012.EURP190.PROD.OUTLOOK.COM Suggested-by: Arthur Lesuisse <arthur.lesuisse@ulb.be> Reviewed-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Paulo Alcantara <pc@manguebit.org> Cc: Ronnie Sahlberg <ronniesahlberg@gmail.com> Cc: Shyam Prasad N <sprasad@microsoft.com> Cc: Tom Talpey <tom@talpey.com> Cc: Bharath SM <bharathsm@microsoft.com> Cc: stable@vger.kernel.org
This commit is contained in:
parent
5520e89a5a
commit
cf4d358966
|
|
@ -2992,14 +2992,14 @@ int cifs_getattr(struct mnt_idmap *idmap, const struct path *path,
|
|||
stat->attributes |= STATX_ATTR_ENCRYPTED;
|
||||
|
||||
/*
|
||||
* If on a multiuser mount without unix extensions or cifsacl being
|
||||
* enabled, and the admin hasn't overridden them, set the ownership
|
||||
* to the fsuid/fsgid of the current process.
|
||||
* If on a multiuser mount without unix extensions, posix extensions
|
||||
* or cifsacl being enabled, and the admin hasn't overridden them,
|
||||
* set the ownership to the fsuid/fsgid of the current process.
|
||||
*/
|
||||
sbflags = cifs_sb_flags(cifs_sb);
|
||||
if ((sbflags & CIFS_MOUNT_MULTIUSER) &&
|
||||
!(sbflags & CIFS_MOUNT_CIFS_ACL) &&
|
||||
!tcon->unix_ext) {
|
||||
!tcon->unix_ext && !tcon->posix_extensions) {
|
||||
if (!(sbflags & CIFS_MOUNT_OVERR_UID))
|
||||
stat->uid = current_fsuid();
|
||||
if (!(sbflags & CIFS_MOUNT_OVERR_GID))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user