| From bippy-5f407fcff5a0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2021-4442: tcp: add sanity tests to TCP_QUEUE_SEQ |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| tcp: add sanity tests to TCP_QUEUE_SEQ |
| |
| Qingyu Li reported a syzkaller bug where the repro |
| changes RCV SEQ _after_ restoring data in the receive queue. |
| |
| mprotect(0x4aa000, 12288, PROT_READ) = 0 |
| mmap(0x1ffff000, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x1ffff000 |
| mmap(0x20000000, 16777216, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x20000000 |
| mmap(0x21000000, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x21000000 |
| socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) = 3 |
| setsockopt(3, SOL_TCP, TCP_REPAIR, [1], 4) = 0 |
| connect(3, {sa_family=AF_INET6, sin6_port=htons(0), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=0}, 28) = 0 |
| setsockopt(3, SOL_TCP, TCP_REPAIR_QUEUE, [1], 4) = 0 |
| sendmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="0x0000000000000003\0\0", iov_len=20}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 20 |
| setsockopt(3, SOL_TCP, TCP_REPAIR, [0], 4) = 0 |
| setsockopt(3, SOL_TCP, TCP_QUEUE_SEQ, [128], 4) = 0 |
| recvfrom(3, NULL, 20, 0, NULL, NULL) = -1 ECONNRESET (Connection reset by peer) |
| |
| syslog shows: |
| [ 111.205099] TCP recvmsg seq # bug 2: copied 80, seq 0, rcvnxt 80, fl 0 |
| [ 111.207894] WARNING: CPU: 1 PID: 356 at net/ipv4/tcp.c:2343 tcp_recvmsg_locked+0x90e/0x29a0 |
| |
| This should not be allowed. TCP_QUEUE_SEQ should only be used |
| when queues are empty. |
| |
| This patch fixes this case, and the tx path as well. |
| |
| The Linux kernel CVE team has assigned CVE-2021-4442 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 3.5 with commit ee9952831cfd0bbe834f4a26489d7dce74582e37 and fixed in 4.19.181 with commit 319f460237fc2965a80aa9a055044e1da7b3692a |
| Issue introduced in 3.5 with commit ee9952831cfd0bbe834f4a26489d7dce74582e37 and fixed in 5.4.106 with commit 3bf899438c123c444f6b644a57784dfbb6b15ad6 |
| Issue introduced in 3.5 with commit ee9952831cfd0bbe834f4a26489d7dce74582e37 and fixed in 5.10.24 with commit 046f3c1c2ff450fb7ae53650e9a95e0074a61f3e |
| Issue introduced in 3.5 with commit ee9952831cfd0bbe834f4a26489d7dce74582e37 and fixed in 5.11.7 with commit 3b72d5a703842f582502d97906f17d6ee122dac2 |
| Issue introduced in 3.5 with commit ee9952831cfd0bbe834f4a26489d7dce74582e37 and fixed in 5.12 with commit 8811f4a9836e31c14ecdf79d9f3cb7c5d463265d |
| |
| Please see https://www.kernel.org for a full list of currently supported |
| kernel versions by the kernel community. |
| |
| Unaffected versions might change over time as fixes are backported to |
| older supported kernel versions. The official CVE entry at |
| https://cve.org/CVERecord/?id=CVE-2021-4442 |
| will be updated if fixes are backported, please check that for the most |
| up to date information about this issue. |
| |
| |
| Affected files |
| ============== |
| |
| The file(s) affected by this issue are: |
| net/ipv4/tcp.c |
| |
| |
| Mitigation |
| ========== |
| |
| The Linux kernel CVE team recommends that you update to the latest |
| stable kernel version for this, and many other bugfixes. Individual |
| changes are never tested alone, but rather are part of a larger kernel |
| release. Cherry-picking individual commits is not recommended or |
| supported by the Linux kernel community at all. If however, updating to |
| the latest release is impossible, the individual changes to resolve this |
| issue can be found at these commits: |
| https://git.kernel.org/stable/c/319f460237fc2965a80aa9a055044e1da7b3692a |
| https://git.kernel.org/stable/c/3bf899438c123c444f6b644a57784dfbb6b15ad6 |
| https://git.kernel.org/stable/c/046f3c1c2ff450fb7ae53650e9a95e0074a61f3e |
| https://git.kernel.org/stable/c/3b72d5a703842f582502d97906f17d6ee122dac2 |
| https://git.kernel.org/stable/c/8811f4a9836e31c14ecdf79d9f3cb7c5d463265d |