]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
smb: client: fix change notify replay double-free
authorHenrique Carvalho <henrique.carvalho@suse.com>
Thu, 18 Jun 2026 20:34:37 +0000 (17:34 -0300)
committerSteve French <stfrench@microsoft.com>
Thu, 18 Jun 2026 23:12:23 +0000 (18:12 -0500)
A response-bearing attempt can return a replayable error and free its
response buffer. If SMB2_notify_init() fails before the next send, cleanup
retains the previous buffer type and frees that response again.

Reset response bookkeeping before each attempt to prevent the stale free.

Fixes: 4f1fffa23769 ("cifs: commands that are retried should have replay flag set")
Cc: stable@vger.kernel.org
Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/smb2pdu.c

index 6e6aed87ab0a0b15b4ee604174799bd83f3008e2..7d4b37b776c5e16b3e7ad7d34cf349a943613d97 100644 (file)
@@ -4116,6 +4116,8 @@ SMB2_change_notify(const unsigned int xid, struct cifs_tcon *tcon,
 
 replay_again:
        /* reinitialize for possible replay */
+       resp_buftype = CIFS_NO_BUFFER;
+       memset(&rsp_iov, 0, sizeof(rsp_iov));
        flags = 0;
        server = cifs_pick_channel(ses);