]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
cifs: Do not attempt to call CIFSGetSrvInodeNumber() without CAP_INFOLEVEL_PASSTHRU
authorPali Rohár <pali@kernel.org>
Sat, 28 Dec 2024 20:21:56 +0000 (21:21 +0100)
committerSteve French <stfrench@microsoft.com>
Mon, 20 Jan 2025 01:58:11 +0000 (19:58 -0600)
CIFSGetSrvInodeNumber() uses SMB_QUERY_FILE_INTERNAL_INFO (0x3ee) level
which is SMB PASSTHROUGH level (>= 0x03e8). SMB PASSTHROUGH levels are
supported only when server announce CAP_INFOLEVEL_PASSTHRU.

So add guard in cifs_query_file_info() function which is the only user of
CIFSGetSrvInodeNumber() function and returns -EOPNOTSUPP when server does
not announce CAP_INFOLEVEL_PASSTHRU.

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

index db3695eddcf9d51f038672c7522c756f990de191..749a83cd0deb0830496d92232799821c49735a90 100644 (file)
@@ -614,7 +614,13 @@ static int cifs_get_srv_inum(const unsigned int xid, struct cifs_tcon *tcon,
         * There may be higher info levels that work but are there Windows
         * server or network appliances for which IndexNumber field is not
         * guaranteed unique?
+        *
+        * CIFSGetSrvInodeNumber() uses SMB_QUERY_FILE_INTERNAL_INFO
+        * which is SMB PASSTHROUGH level therefore check for capability.
+        * Note that this function can be called with tcon == NULL.
         */
+       if (tcon && !(tcon->ses->capabilities & CAP_INFOLEVEL_PASSTHRU))
+               return -EOPNOTSUPP;
        return CIFSGetSrvInodeNumber(xid, tcon, full_path, uniqueid,
                                     cifs_sb->local_nls,
                                     cifs_remap(cifs_sb));