cifs: Do not add FILE_READ_ATTRIBUTES when using GENERIC_READ/EXECUTE/ALL
authorPali Rohár <pali@kernel.org>
Sun, 22 Dec 2024 16:58:21 +0000 (17:58 +0100)
committerSteve French <stfrench@microsoft.com>
Tue, 1 Apr 2025 09:58:09 +0000 (04:58 -0500)
Individual bits GENERIC_READ, GENERIC_EXECUTE and GENERIC_ALL have meaning
which includes also access right for FILE_READ_ATTRIBUTES. So specifying
FILE_READ_ATTRIBUTES bit together with one of those GENERIC (except
GENERIC_WRITE) does not do anything.

This change prevents calling additional (fallback) code and sending more
requests without FILE_READ_ATTRIBUTES when the primary request fails on
-EACCES, as it is not needed at all.

Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/smb2file.c

index 5d60410460d2b95db9ac871bde87d3aa9d75383c..a7f6292388306c72f183b0351b454808ca814047 100644 (file)
@@ -158,7 +158,16 @@ int smb2_open_file(const unsigned int xid, struct cifs_open_parms *oparms, __u32
        if (smb2_path == NULL)
                return -ENOMEM;
 
+       /*
+        * GENERIC_READ, GENERIC_EXECUTE, GENERIC_ALL and MAXIMUM_ALLOWED
+        * contains also FILE_READ_ATTRIBUTES access right. So do not append
+        * FILE_READ_ATTRIBUTES when not needed and prevent calling code path
+        * for retry_without_read_attributes.
+        */
        if (!(oparms->desired_access & FILE_READ_ATTRIBUTES) &&
+           !(oparms->desired_access & GENERIC_READ) &&
+           !(oparms->desired_access & GENERIC_EXECUTE) &&
+           !(oparms->desired_access & GENERIC_ALL) &&
            !(oparms->desired_access & MAXIMUM_ALLOWED)) {
                oparms->desired_access |= FILE_READ_ATTRIBUTES;
                retry_without_read_attributes = true;