| 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-2022-48830: can: isotp: fix potential CAN frame reception race in isotp_rcv() |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| can: isotp: fix potential CAN frame reception race in isotp_rcv() |
| |
| When receiving a CAN frame the current code logic does not consider |
| concurrently receiving processes which do not show up in real world |
| usage. |
| |
| Ziyang Xuan writes: |
| |
| The following syz problem is one of the scenarios. so->rx.len is |
| changed by isotp_rcv_ff() during isotp_rcv_cf(), so->rx.len equals |
| 0 before alloc_skb() and equals 4096 after alloc_skb(). That will |
| trigger skb_over_panic() in skb_put(). |
| |
| ======================================================= |
| CPU: 1 PID: 19 Comm: ksoftirqd/1 Not tainted 5.16.0-rc8-syzkaller #0 |
| RIP: 0010:skb_panic+0x16c/0x16e net/core/skbuff.c:113 |
| Call Trace: |
| <TASK> |
| skb_over_panic net/core/skbuff.c:118 [inline] |
| skb_put.cold+0x24/0x24 net/core/skbuff.c:1990 |
| isotp_rcv_cf net/can/isotp.c:570 [inline] |
| isotp_rcv+0xa38/0x1e30 net/can/isotp.c:668 |
| deliver net/can/af_can.c:574 [inline] |
| can_rcv_filter+0x445/0x8d0 net/can/af_can.c:635 |
| can_receive+0x31d/0x580 net/can/af_can.c:665 |
| can_rcv+0x120/0x1c0 net/can/af_can.c:696 |
| __netif_receive_skb_one_core+0x114/0x180 net/core/dev.c:5465 |
| __netif_receive_skb+0x24/0x1b0 net/core/dev.c:5579 |
| |
| Therefore we make sure the state changes and data structures stay |
| consistent at CAN frame reception time by adding a spin_lock in |
| isotp_rcv(). This fixes the issue reported by syzkaller but does not |
| affect real world operation. |
| |
| The Linux kernel CVE team has assigned CVE-2022-48830 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 5.10 with commit e057dd3fc20ffb3d7f150af46542a51b59b90127 and fixed in 5.10.101 with commit 7b53d2204ce79b27a878074a77d64f40ec21dbca |
| Issue introduced in 5.10 with commit e057dd3fc20ffb3d7f150af46542a51b59b90127 and fixed in 5.15.24 with commit f90cc68f9f4b5d8585ad5d0a206a9d37ac299ef3 |
| Issue introduced in 5.10 with commit e057dd3fc20ffb3d7f150af46542a51b59b90127 and fixed in 5.16.10 with commit 5b068f33bc8acfcfd5ea7992a2dafb30d89bad30 |
| Issue introduced in 5.10 with commit e057dd3fc20ffb3d7f150af46542a51b59b90127 and fixed in 5.17 with commit 7c759040c1dd03954f650f147ae7175476d51314 |
| |
| 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-48830 |
| 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/can/isotp.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/7b53d2204ce79b27a878074a77d64f40ec21dbca |
| https://git.kernel.org/stable/c/f90cc68f9f4b5d8585ad5d0a206a9d37ac299ef3 |
| https://git.kernel.org/stable/c/5b068f33bc8acfcfd5ea7992a2dafb30d89bad30 |
| https://git.kernel.org/stable/c/7c759040c1dd03954f650f147ae7175476d51314 |