Linux: smb: client: delete compound mids on send failure before unlock
What fixes it
- 70783946f3b5d0c06ec7df0f5e7bec2bfad24efbLinuxCVE List
- 8f6f8a48399f82f4a83f7b9f25b9707e0062a4f9LinuxCVE List
- 4.21LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
smb: client: delete compound mids on send failure before unlock
When sending a compound request fails, smb_send_rqst() kicks off a reconnect. compound_send_recv() still has those mids on pending_mid_q, but it unlocks the server without removing them first.
During reconnect, cifs_abort_connection() walks pending_mid_q and runs each mid callback. With no response yet, those callbacks return credits and drop in_flight. Then compound_send_recv()'s send-error path returns the same credits again. in_flight ends up decremented twice and smb2_add_credits() WARNs.
syzbot hits this during SMB2_negotiate when the socket send fails.
cifs_call_async() already calls delete_mid() before unlock on send failure. Do the same for compound chains and set cancelled_mid[] so the out: path does not delete them again.
Text from CVE List
Affected versions 8
- Linuxaffected: ee258d79159afed52ca9372aeb9c1a51e89b32ee before 70783946f3b5d0c06ec7df0f5e7bec2bfad24efbCVE List
- Linuxaffected: ee258d79159afed52ca9372aeb9c1a51e89b32ee before 8f6f8a48399f82f4a83f7b9f25b9707e0062a4f9CVE List
- Linuxaffected: 3c57a0be487088b08d9c88998f911eb4a7ba36e4CVE List
- Linuxaffected: 4.20.11 before 4.21CVE List
- Linuxaffected: 5.0CVE List
- Linuxunaffected: all versions before 5.0CVE List
- Linuxunaffected: 7.2.9 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List