| 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-46999: sctp: do asoc update earlier in sctp_sf_do_dupcook_a |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| sctp: do asoc update earlier in sctp_sf_do_dupcook_a |
| |
| There's a panic that occurs in a few of envs, the call trace is as below: |
| |
| [] general protection fault, ... 0x29acd70f1000a: 0000 [#1] SMP PTI |
| [] RIP: 0010:sctp_ulpevent_notify_peer_addr_change+0x4b/0x1fa [sctp] |
| [] sctp_assoc_control_transport+0x1b9/0x210 [sctp] |
| [] sctp_do_8_2_transport_strike.isra.16+0x15c/0x220 [sctp] |
| [] sctp_cmd_interpreter.isra.21+0x1231/0x1a10 [sctp] |
| [] sctp_do_sm+0xc3/0x2a0 [sctp] |
| [] sctp_generate_timeout_event+0x81/0xf0 [sctp] |
| |
| This is caused by a transport use-after-free issue. When processing a |
| duplicate COOKIE-ECHO chunk in sctp_sf_do_dupcook_a(), both COOKIE-ACK |
| and SHUTDOWN chunks are allocated with the transort from the new asoc. |
| However, later in the sideeffect machine, the old asoc is used to send |
| them out and old asoc's shutdown_last_sent_to is set to the transport |
| that SHUTDOWN chunk attached to in sctp_cmd_setup_t2(), which actually |
| belongs to the new asoc. After the new_asoc is freed and the old asoc |
| T2 timeout, the old asoc's shutdown_last_sent_to that is already freed |
| would be accessed in sctp_sf_t2_timer_expire(). |
| |
| Thanks Alexander and Jere for helping dig into this issue. |
| |
| To fix it, this patch is to do the asoc update first, then allocate |
| the COOKIE-ACK and SHUTDOWN chunks with the 'updated' old asoc. This |
| would make more sense, as a chunk from an asoc shouldn't be sent out |
| with another asoc. We had fixed quite a few issues caused by this. |
| |
| The Linux kernel CVE team has assigned CVE-2021-46999 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 4.19.123 with commit db8bf823e70f239372c62f13e4eb6f08a1665e8c and fixed in 4.19.191 with commit d624f2991b977821375fbd56c91b0c91d456a697 |
| Issue introduced in 5.4.41 with commit a204d577be70e0a0a6023cf1b9859c9ebffaeecd and fixed in 5.4.120 with commit b1b31948c0af44628e43353828453461bb74098f |
| Issue introduced in 5.7 with commit 145cb2f7177d94bc54563ed26027e952ee0ae03c and fixed in 5.10.38 with commit f01988ecf3654f805282dce2d3bb9afe68d2691e |
| Issue introduced in 5.7 with commit 145cb2f7177d94bc54563ed26027e952ee0ae03c and fixed in 5.11.22 with commit 61b877bad9bb0d82b7d8841be50872557090a704 |
| Issue introduced in 5.7 with commit 145cb2f7177d94bc54563ed26027e952ee0ae03c and fixed in 5.12.5 with commit 0bfd913c2121b3d553bfd52810fe6061d542d625 |
| Issue introduced in 5.7 with commit 145cb2f7177d94bc54563ed26027e952ee0ae03c and fixed in 5.13 with commit 35b4f24415c854cd718ccdf38dbea6297f010aae |
| Issue introduced in 5.6.13 with commit a5ce8531ea508d270822b2bc6140c6198c8a2a7b |
| |
| 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-46999 |
| 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/sctp/sm_statefuns.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/d624f2991b977821375fbd56c91b0c91d456a697 |
| https://git.kernel.org/stable/c/b1b31948c0af44628e43353828453461bb74098f |
| https://git.kernel.org/stable/c/f01988ecf3654f805282dce2d3bb9afe68d2691e |
| https://git.kernel.org/stable/c/61b877bad9bb0d82b7d8841be50872557090a704 |
| https://git.kernel.org/stable/c/0bfd913c2121b3d553bfd52810fe6061d542d625 |
| https://git.kernel.org/stable/c/35b4f24415c854cd718ccdf38dbea6297f010aae |