Description
In the Linux kernel, the following vulnerability has been resolved: net/iucv: fix the recvmsg window update iucv_sock_recvmsg() sends the HiperSockets-only AF_IUCV_FLAG_WIN without testing the transport, so on a classic z/VM socket iucv_send_ctrl() sizes the skb through a NULL iucv->hs_dev. SO_MSGLIMIT accepts 1, so msglimit / 2 is zero and one recvmsg() on its own socket is enough for an unprivileged process to take a spurious disconnect. It also calls iucv_send_ctrl() under spin_lock_bh(&message_q.lock), which allocates GFP_KERNEL inside a section the code treats as atomic. Sending outside that lock lets two recvmsg() reach afiucv_hs_send() at once, where msg_recv is sampled for the advertised window and subtracted after dev_queue_xmit() -- and sendmsg reaches that counter under lock_sock() while recvmsg holds no socket lock, so both can subtract the same value, the counter goes negative and the credit reaches the peer twice. Test the transport, claim the credit with atomic_xchg() after the last error exit and hand it back if the transmit fails, and send once the lock is dropped.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
3881ac441f642d56503818123446f7298442236b to < 01123990f59ce32a1a5e690a4aeee002e932bb07affected3881ac441f642d56503818123446f7298442236b to < 1ebe68bbf8e75eeccaca0c7bc9694f5bc0c3f00aaffected3881ac441f642d56503818123446f7298442236b to < 23e7fbbdca5aaba2a9a7bb9e4f2dc179c290ee76affected3881ac441f642d56503818123446f7298442236b to < ce8aac3eb57f5366fa082b7cb8a1ac5652274f37affected3881ac441f642d56503818123446f7298442236b to < 8f2efa742f4cfe7dd756154f8bc07350dbe3ec92affected3881ac441f642d56503818123446f7298442236b to < fe7393a627db2d093e8c0cae69d619b30fefae5faffected3881ac441f642d56503818123446f7298442236b to < fa5acd038ea657ad5033713d6916214cbd349151affected
Linux Linux
Default version status: affected
3.2affected0 to < 3.2unaffected5.15.224 to ≤ 5.15.*unaffected6.1.191 to ≤ 6.1.*unaffected6.6.161 to ≤ 6.6.*unaffected6.12.115 to ≤ 6.12.*unaffected6.18.59 to ≤ 6.18.*unaffected7.2.13 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/01123990f59ce32a1a5e690a4aeee002e932bb07 ↗
- https://git.kernel.org/stable/c/1ebe68bbf8e75eeccaca0c7bc9694f5bc0c3f00a ↗
- https://git.kernel.org/stable/c/23e7fbbdca5aaba2a9a7bb9e4f2dc179c290ee76 ↗
- https://git.kernel.org/stable/c/ce8aac3eb57f5366fa082b7cb8a1ac5652274f37 ↗
- https://git.kernel.org/stable/c/8f2efa742f4cfe7dd756154f8bc07350dbe3ec92 ↗
- https://git.kernel.org/stable/c/fe7393a627db2d093e8c0cae69d619b30fefae5f ↗
- https://git.kernel.org/stable/c/fa5acd038ea657ad5033713d6916214cbd349151 ↗