Re: [SMB3][PATCH] backup intent flag missing from directory and symlink opens

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



пн, 27 авг. 2018 г. в 15:17, Steve French <smfrench@xxxxxxxxx>:
>
>     SMB3: Backup intent flag missing for directory opens with backupuid mounts
>
>     When "backup intent" is requested on the mount (e.g. backupuid or
>     backupgid mount options), the corresponding flag needs to be set
>     on opens of directories (and files) but was missing in some
>     places causing access denied trying to enumerate and backup
>     servers.
>
>     Fixes kernel bugzilla #200953
>     https://bugzilla.kernel.org/show_bug.cgi?id=200953
>
>     Reported-and-tested-by: <whh@xxxxxxxxxx>
>     Signed-off-by: Steve French <stfrench@xxxxxxxxxxxxx>
>     CC: Stable <stable@xxxxxxxxxxxxxxx>
>
> diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
> index d32eaa4b2437..6e8765f44508 100644
> --- a/fs/cifs/inode.c
> +++ b/fs/cifs/inode.c
> @@ -467,6 +467,8 @@ cifs_sfu_type(struct cifs_fattr *fattr, const char *path,
>         oparms.cifs_sb = cifs_sb;
>         oparms.desired_access = GENERIC_READ;
>         oparms.create_options = CREATE_NOT_DIR;
> +       if (backup_cred(cifs_sb))
> +               oparms.create_options |= CREATE_OPEN_BACKUP_INTENT;
>         oparms.disposition = FILE_OPEN;
>         oparms.path = path;
>         oparms.fid = &fid;
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index f551afca2152..32cae6e49ea2 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -630,7 +630,10 @@ smb2_is_path_accessible(const unsigned int xid,
> struct cifs_tcon *tcon,
>         oparms.tcon = tcon;
>         oparms.desired_access = FILE_READ_ATTRIBUTES;
>         oparms.disposition = FILE_OPEN;
> -       oparms.create_options = 0;
> +       if (backup_cred(cifs_sb))
> +               oparms.create_options = CREATE_OPEN_BACKUP_INTENT;
> +       else
> +               oparms.create_options = 0;
>         oparms.fid = &fid;
>         oparms.reconnect = false;
>
> @@ -779,7 +782,10 @@ smb2_query_eas(const unsigned int xid, struct
> cifs_tcon *tcon,
>         oparms.tcon = tcon;
>         oparms.desired_access = FILE_READ_EA;
>         oparms.disposition = FILE_OPEN;
> -       oparms.create_options = 0;
> +       if (backup_cred(cifs_sb))
> +               oparms.create_options = CREATE_OPEN_BACKUP_INTENT;
> +       else
> +               oparms.create_options = 0;
>         oparms.fid = &fid;
>         oparms.reconnect = false;
>
> @@ -858,7 +864,10 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,
>         oparms.tcon = tcon;
>         oparms.desired_access = FILE_WRITE_EA;
>         oparms.disposition = FILE_OPEN;
> -       oparms.create_options = 0;
> +       if (backup_cred(cifs_sb))
> +               oparms.create_options = CREATE_OPEN_BACKUP_INTENT;
> +       else
> +               oparms.create_options = 0;
>         oparms.fid = &fid;
>         oparms.reconnect = false;
>
> @@ -1453,7 +1462,10 @@ smb2_query_dir_first(const unsigned int xid,
> struct cifs_tcon *tcon,
>         oparms.tcon = tcon;
>         oparms.desired_access = FILE_READ_ATTRIBUTES | FILE_READ_DATA;
>         oparms.disposition = FILE_OPEN;
> -       oparms.create_options = 0;
> +       if (backup_cred(cifs_sb))
> +               oparms.create_options = CREATE_OPEN_BACKUP_INTENT;
> +       else
> +               oparms.create_options = 0;
>         oparms.fid = fid;
>         oparms.reconnect = false;
>
> @@ -1857,7 +1869,10 @@ smb2_query_symlink(const unsigned int xid,
> struct cifs_tcon *tcon,
>         oparms.tcon = tcon;
>         oparms.desired_access = FILE_READ_ATTRIBUTES;
>         oparms.disposition = FILE_OPEN;
> -       oparms.create_options = 0;
> +       if (backup_cred(cifs_sb))
> +               oparms.create_options = CREATE_OPEN_BACKUP_INTENT;
> +       else
> +               oparms.create_options = 0;
>         oparms.fid = &fid;
>         oparms.reconnect = false;
>
> --
> Thanks,
>
> Steve

Reviewed-by: Pavel Shilovsky <pshilov@xxxxxxxxxxxxx>

--
Best regards,
Pavel Shilovsky




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux