smb3: fix leak in "open on server" perf counter
authorSteve French <stfrench@microsoft.com>
Sun, 22 Sep 2019 05:55:46 +0000 (00:55 -0500)
committerSteve French <stfrench@microsoft.com>
Tue, 24 Sep 2019 03:48:36 +0000 (22:48 -0500)
We were not bumping up the "open on server" (num_remote_opens)
counter (in some cases) on opens of the share root so
could end up showing as a negative value.

CC: Stable <stable@vger.kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
fs/cifs/smb2ops.c
fs/cifs/smb2pdu.c

index eaed180613143652c1f6ef21049da0056790b41b..3010066a87096f46511ac89d216a5c4cc546eaca 100644 (file)
@@ -751,6 +751,8 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon, struct cifs_fid *pfid)
                goto oshr_exit;
        }
 
+       atomic_inc(&tcon->num_remote_opens);
+
        o_rsp = (struct smb2_create_rsp *)rsp_iov[0].iov_base;
        oparms.fid->persistent_fid = o_rsp->PersistentFileId;
        oparms.fid->volatile_fid = o_rsp->VolatileFileId;
@@ -1176,6 +1178,7 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,
 
        rc = compound_send_recv(xid, ses, flags, 3, rqst,
                                resp_buftype, rsp_iov);
+       /* no need to bump num_remote_opens because handle immediately closed */
 
  sea_exit:
        kfree(ea);
@@ -1518,6 +1521,8 @@ smb2_ioctl_query_info(const unsigned int xid,
                                resp_buftype, rsp_iov);
        if (rc)
                goto iqinf_exit;
+
+       /* No need to bump num_remote_opens since handle immediately closed */
        if (qi.flags & PASSTHRU_FSCTL) {
                pqi = (struct smb_query_info __user *)arg;
                io_rsp = (struct smb2_ioctl_rsp *)rsp_iov[1].iov_base;
index 87066f1af12c0ccbc8451205efca24df34037940..5f2491efd950efc46c252aa8faf19064dd92aa1a 100644 (file)
@@ -2352,6 +2352,7 @@ int smb311_posix_mkdir(const unsigned int xid, struct inode *inode,
        rqst.rq_iov = iov;
        rqst.rq_nvec = n_iov;
 
+       /* no need to inc num_remote_opens because we close it just below */
        trace_smb3_posix_mkdir_enter(xid, tcon->tid, ses->Suid, CREATE_NOT_FILE,
                                    FILE_WRITE_ATTRIBUTES);
        /* resource #4: response buffer */