| From bippy-1.1.0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@kernel.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2022-49838: sctp: clear out_curr if all frag chunks of current msg are pruned |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| sctp: clear out_curr if all frag chunks of current msg are pruned |
| |
| A crash was reported by Zhen Chen: |
| |
| list_del corruption, ffffa035ddf01c18->next is NULL |
| WARNING: CPU: 1 PID: 250682 at lib/list_debug.c:49 __list_del_entry_valid+0x59/0xe0 |
| RIP: 0010:__list_del_entry_valid+0x59/0xe0 |
| Call Trace: |
| sctp_sched_dequeue_common+0x17/0x70 [sctp] |
| sctp_sched_fcfs_dequeue+0x37/0x50 [sctp] |
| sctp_outq_flush_data+0x85/0x360 [sctp] |
| sctp_outq_uncork+0x77/0xa0 [sctp] |
| sctp_cmd_interpreter.constprop.0+0x164/0x1450 [sctp] |
| sctp_side_effects+0x37/0xe0 [sctp] |
| sctp_do_sm+0xd0/0x230 [sctp] |
| sctp_primitive_SEND+0x2f/0x40 [sctp] |
| sctp_sendmsg_to_asoc+0x3fa/0x5c0 [sctp] |
| sctp_sendmsg+0x3d5/0x440 [sctp] |
| sock_sendmsg+0x5b/0x70 |
| |
| and in sctp_sched_fcfs_dequeue() it dequeued a chunk from stream |
| out_curr outq while this outq was empty. |
| |
| Normally stream->out_curr must be set to NULL once all frag chunks of |
| current msg are dequeued, as we can see in sctp_sched_dequeue_done(). |
| However, in sctp_prsctp_prune_unsent() as it is not a proper dequeue, |
| sctp_sched_dequeue_done() is not called to do this. |
| |
| This patch is to fix it by simply setting out_curr to NULL when the |
| last frag chunk of current msg is dequeued from out_curr stream in |
| sctp_prsctp_prune_unsent(). |
| |
| The Linux kernel CVE team has assigned CVE-2022-49838 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 4.15 with commit 5bbbbe32a43199c2b9ea5ea66fab6241c64beb51 and fixed in 5.10.156 with commit e27458b18b35caee4b27b37a4a9c503b93cae5cc |
| Issue introduced in 4.15 with commit 5bbbbe32a43199c2b9ea5ea66fab6241c64beb51 and fixed in 5.15.81 with commit 2ea600b598dd3e061854dd4dd5b4c815397dfcea |
| Issue introduced in 4.15 with commit 5bbbbe32a43199c2b9ea5ea66fab6241c64beb51 and fixed in 6.0.10 with commit 3eff34e01062ec08fbb45ce2baaaa644550be821 |
| Issue introduced in 4.15 with commit 5bbbbe32a43199c2b9ea5ea66fab6241c64beb51 and fixed in 6.1 with commit 2f201ae14ae0f91dbf1cffea7bb1e29e81d4d108 |
| |
| 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-2022-49838 |
| 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/outqueue.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/e27458b18b35caee4b27b37a4a9c503b93cae5cc |
| https://git.kernel.org/stable/c/2ea600b598dd3e061854dd4dd5b4c815397dfcea |
| https://git.kernel.org/stable/c/3eff34e01062ec08fbb45ce2baaaa644550be821 |
| https://git.kernel.org/stable/c/2f201ae14ae0f91dbf1cffea7bb1e29e81d4d108 |