smb3: interface count displayed incorrectly
authorSteve French <stfrench@microsoft.com>
Sat, 15 Oct 2022 22:02:30 +0000 (17:02 -0500)
committerSteve French <stfrench@microsoft.com>
Wed, 19 Oct 2022 15:06:23 +0000 (10:06 -0500)
The "Server interfaces" count in /proc/fs/cifs/DebugData increases
as the interfaces are requeried, rather than being reset to the new
value.  This could cause a problem if the server disabled
multichannel as the iface_count is checked in try_adding_channels
to see if multichannel still supported.

Also fixes a coverity warning:

Addresses-Coverity: 1526374 ("Concurrent data access violations  (MISSING_LOCK)")
Cc: <stable@vger.kernel.org>
Reviewed-by: Bharath SM <bharathsm@microsoft.com>
Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/smb2ops.c

index 17b25153cb6897d98d135cc910de9cf0559715f8..4f53fa012936e3530eb33545e2dcbffb8f1fcf60 100644 (file)
@@ -530,6 +530,7 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf,
        p = buf;
 
        spin_lock(&ses->iface_lock);
+       ses->iface_count = 0;
        /*
         * Go through iface_list and do kref_put to remove
         * any unused ifaces. ifaces in use will be removed
@@ -651,9 +652,9 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf,
                        kref_put(&iface->refcount, release_iface);
                } else
                        list_add_tail(&info->iface_head, &ses->iface_list);
-               spin_unlock(&ses->iface_lock);
 
                ses->iface_count++;
+               spin_unlock(&ses->iface_lock);
                ses->iface_last_update = jiffies;
 next_iface:
                nb_iface++;