| 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-2023-53138: net: caif: Fix use-after-free in cfusbl_device_notify() |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| net: caif: Fix use-after-free in cfusbl_device_notify() |
| |
| syzbot reported use-after-free in cfusbl_device_notify() [1]. This |
| causes a stack trace like below: |
| |
| BUG: KASAN: use-after-free in cfusbl_device_notify+0x7c9/0x870 net/caif/caif_usb.c:138 |
| Read of size 8 at addr ffff88807ac4e6f0 by task kworker/u4:6/1214 |
| |
| CPU: 0 PID: 1214 Comm: kworker/u4:6 Not tainted 5.19.0-rc3-syzkaller-00146-g92f20ff72066 #0 |
| Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 |
| Workqueue: netns cleanup_net |
| Call Trace: |
| <TASK> |
| __dump_stack lib/dump_stack.c:88 [inline] |
| dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106 |
| print_address_description.constprop.0.cold+0xeb/0x467 mm/kasan/report.c:313 |
| print_report mm/kasan/report.c:429 [inline] |
| kasan_report.cold+0xf4/0x1c6 mm/kasan/report.c:491 |
| cfusbl_device_notify+0x7c9/0x870 net/caif/caif_usb.c:138 |
| notifier_call_chain+0xb5/0x200 kernel/notifier.c:87 |
| call_netdevice_notifiers_info+0xb5/0x130 net/core/dev.c:1945 |
| call_netdevice_notifiers_extack net/core/dev.c:1983 [inline] |
| call_netdevice_notifiers net/core/dev.c:1997 [inline] |
| netdev_wait_allrefs_any net/core/dev.c:10227 [inline] |
| netdev_run_todo+0xbc0/0x10f0 net/core/dev.c:10341 |
| default_device_exit_batch+0x44e/0x590 net/core/dev.c:11334 |
| ops_exit_list+0x125/0x170 net/core/net_namespace.c:167 |
| cleanup_net+0x4ea/0xb00 net/core/net_namespace.c:594 |
| process_one_work+0x996/0x1610 kernel/workqueue.c:2289 |
| worker_thread+0x665/0x1080 kernel/workqueue.c:2436 |
| kthread+0x2e9/0x3a0 kernel/kthread.c:376 |
| ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:302 |
| </TASK> |
| |
| When unregistering a net device, unregister_netdevice_many_notify() |
| sets the device's reg_state to NETREG_UNREGISTERING, calls notifiers |
| with NETDEV_UNREGISTER, and adds the device to the todo list. |
| |
| Later on, devices in the todo list are processed by netdev_run_todo(). |
| netdev_run_todo() waits devices' reference count become 1 while |
| rebdoadcasting NETDEV_UNREGISTER notification. |
| |
| When cfusbl_device_notify() is called with NETDEV_UNREGISTER multiple |
| times, the parent device might be freed. This could cause UAF. |
| Processing NETDEV_UNREGISTER multiple times also causes inbalance of |
| reference count for the module. |
| |
| This patch fixes the issue by accepting only first NETDEV_UNREGISTER |
| notification. |
| |
| The Linux kernel CVE team has assigned CVE-2023-53138 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 3.3 with commit 7ad65bf68d705b445ef10b77ab50dab22be185ee and fixed in 4.14.310 with commit 68a45c3cf0e2242a533657f4f535d9b6a7447a79 |
| Issue introduced in 3.3 with commit 7ad65bf68d705b445ef10b77ab50dab22be185ee and fixed in 4.19.278 with commit 1793da97a23e31c5bf06631f3f3e5a25f368fd64 |
| Issue introduced in 3.3 with commit 7ad65bf68d705b445ef10b77ab50dab22be185ee and fixed in 5.4.237 with commit 9dc16be373b382ddd4c274052a6e870a95e76c01 |
| Issue introduced in 3.3 with commit 7ad65bf68d705b445ef10b77ab50dab22be185ee and fixed in 5.10.175 with commit c3aaec463a632cf4187dc017e421bfa69d7834a9 |
| Issue introduced in 3.3 with commit 7ad65bf68d705b445ef10b77ab50dab22be185ee and fixed in 5.15.103 with commit 3f14457e1584224f4296af613bbd99deb60b5d91 |
| Issue introduced in 3.3 with commit 7ad65bf68d705b445ef10b77ab50dab22be185ee and fixed in 6.1.20 with commit 287027d8a567168a5d8ce5cb0cba16a34791a48c |
| Issue introduced in 3.3 with commit 7ad65bf68d705b445ef10b77ab50dab22be185ee and fixed in 6.2.7 with commit d1a11bbdbb5ea9f172019c5a4a3e9d8eabd72179 |
| Issue introduced in 3.3 with commit 7ad65bf68d705b445ef10b77ab50dab22be185ee and fixed in 6.3 with commit 9781e98a97110f5e76999058368b4be76a788484 |
| |
| 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-2023-53138 |
| 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/caif/caif_usb.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/68a45c3cf0e2242a533657f4f535d9b6a7447a79 |
| https://git.kernel.org/stable/c/1793da97a23e31c5bf06631f3f3e5a25f368fd64 |
| https://git.kernel.org/stable/c/9dc16be373b382ddd4c274052a6e870a95e76c01 |
| https://git.kernel.org/stable/c/c3aaec463a632cf4187dc017e421bfa69d7834a9 |
| https://git.kernel.org/stable/c/3f14457e1584224f4296af613bbd99deb60b5d91 |
| https://git.kernel.org/stable/c/287027d8a567168a5d8ce5cb0cba16a34791a48c |
| https://git.kernel.org/stable/c/d1a11bbdbb5ea9f172019c5a4a3e9d8eabd72179 |
| https://git.kernel.org/stable/c/9781e98a97110f5e76999058368b4be76a788484 |