| 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-2023-52784: bonding: stop the device in bond_setup_by_slave() |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| bonding: stop the device in bond_setup_by_slave() |
| |
| Commit 9eed321cde22 ("net: lapbether: only support ethernet devices") |
| has been able to keep syzbot away from net/lapb, until today. |
| |
| In the following splat [1], the issue is that a lapbether device has |
| been created on a bonding device without members. Then adding a non |
| ARPHRD_ETHER member forced the bonding master to change its type. |
| |
| The fix is to make sure we call dev_close() in bond_setup_by_slave() |
| so that the potential linked lapbether devices (or any other devices |
| having assumptions on the physical device) are removed. |
| |
| A similar bug has been addressed in commit 40baec225765 |
| ("bonding: fix panic on non-ARPHRD_ETHER enslave failure") |
| |
| [1] |
| skbuff: skb_under_panic: text:ffff800089508810 len:44 put:40 head:ffff0000c78e7c00 data:ffff0000c78e7bea tail:0x16 end:0x140 dev:bond0 |
| kernel BUG at net/core/skbuff.c:192 ! |
| Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP |
| Modules linked in: |
| CPU: 0 PID: 6007 Comm: syz-executor383 Not tainted 6.6.0-rc3-syzkaller-gbf6547d8715b #0 |
| Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/04/2023 |
| pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) |
| pc : skb_panic net/core/skbuff.c:188 [inline] |
| pc : skb_under_panic+0x13c/0x140 net/core/skbuff.c:202 |
| lr : skb_panic net/core/skbuff.c:188 [inline] |
| lr : skb_under_panic+0x13c/0x140 net/core/skbuff.c:202 |
| sp : ffff800096a06aa0 |
| x29: ffff800096a06ab0 x28: ffff800096a06ba0 x27: dfff800000000000 |
| x26: ffff0000ce9b9b50 x25: 0000000000000016 x24: ffff0000c78e7bea |
| x23: ffff0000c78e7c00 x22: 000000000000002c x21: 0000000000000140 |
| x20: 0000000000000028 x19: ffff800089508810 x18: ffff800096a06100 |
| x17: 0000000000000000 x16: ffff80008a629a3c x15: 0000000000000001 |
| x14: 1fffe00036837a32 x13: 0000000000000000 x12: 0000000000000000 |
| x11: 0000000000000201 x10: 0000000000000000 x9 : cb50b496c519aa00 |
| x8 : cb50b496c519aa00 x7 : 0000000000000001 x6 : 0000000000000001 |
| x5 : ffff800096a063b8 x4 : ffff80008e280f80 x3 : ffff8000805ad11c |
| x2 : 0000000000000001 x1 : 0000000100000201 x0 : 0000000000000086 |
| Call trace: |
| skb_panic net/core/skbuff.c:188 [inline] |
| skb_under_panic+0x13c/0x140 net/core/skbuff.c:202 |
| skb_push+0xf0/0x108 net/core/skbuff.c:2446 |
| ip6gre_header+0xbc/0x738 net/ipv6/ip6_gre.c:1384 |
| dev_hard_header include/linux/netdevice.h:3136 [inline] |
| lapbeth_data_transmit+0x1c4/0x298 drivers/net/wan/lapbether.c:257 |
| lapb_data_transmit+0x8c/0xb0 net/lapb/lapb_iface.c:447 |
| lapb_transmit_buffer+0x178/0x204 net/lapb/lapb_out.c:149 |
| lapb_send_control+0x220/0x320 net/lapb/lapb_subr.c:251 |
| __lapb_disconnect_request+0x9c/0x17c net/lapb/lapb_iface.c:326 |
| lapb_device_event+0x288/0x4e0 net/lapb/lapb_iface.c:492 |
| notifier_call_chain+0x1a4/0x510 kernel/notifier.c:93 |
| raw_notifier_call_chain+0x3c/0x50 kernel/notifier.c:461 |
| call_netdevice_notifiers_info net/core/dev.c:1970 [inline] |
| call_netdevice_notifiers_extack net/core/dev.c:2008 [inline] |
| call_netdevice_notifiers net/core/dev.c:2022 [inline] |
| __dev_close_many+0x1b8/0x3c4 net/core/dev.c:1508 |
| dev_close_many+0x1e0/0x470 net/core/dev.c:1559 |
| dev_close+0x174/0x250 net/core/dev.c:1585 |
| lapbeth_device_event+0x2e4/0x958 drivers/net/wan/lapbether.c:466 |
| notifier_call_chain+0x1a4/0x510 kernel/notifier.c:93 |
| raw_notifier_call_chain+0x3c/0x50 kernel/notifier.c:461 |
| call_netdevice_notifiers_info net/core/dev.c:1970 [inline] |
| call_netdevice_notifiers_extack net/core/dev.c:2008 [inline] |
| call_netdevice_notifiers net/core/dev.c:2022 [inline] |
| __dev_close_many+0x1b8/0x3c4 net/core/dev.c:1508 |
| dev_close_many+0x1e0/0x470 net/core/dev.c:1559 |
| dev_close+0x174/0x250 net/core/dev.c:1585 |
| bond_enslave+0x2298/0x30cc drivers/net/bonding/bond_main.c:2332 |
| bond_do_ioctl+0x268/0xc64 drivers/net/bonding/bond_main.c:4539 |
| dev_ifsioc+0x754/0x9ac |
| dev_ioctl+0x4d8/0xd34 net/core/dev_ioctl.c:786 |
| sock_do_ioctl+0x1d4/0x2d0 net/socket.c:1217 |
| sock_ioctl+0x4e8/0x834 net/socket.c:1322 |
| vfs_ioctl fs/ioctl.c:51 [inline] |
| __do_sys_ioctl fs/ioctl.c:871 [inline] |
| __se_sys_ioctl fs/ioctl.c:857 [inline] |
| __arm64_sys_ioctl+0x14c/0x1c8 fs/ioctl.c:857 |
| __invoke_syscall arch/arm64/kernel/syscall.c:37 [inline] |
| invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:51 |
| el0_svc_common+0x130/0x23c arch/arm64/kernel/syscall.c:136 |
| do_el0_svc+0x48/0x58 arch/arm64/kernel/syscall.c:155 |
| el0_svc+0x58/0x16c arch/arm64/kernel/entry-common.c:678 |
| el0t_64_sync_handler+0x84/0xfc arch/arm64/kernel/entry-common.c:696 |
| el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591 |
| Code: aa1803e6 aa1903e7 a90023f5 94785b8b (d4210000) |
| |
| The Linux kernel CVE team has assigned CVE-2023-52784 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 2.6.24 with commit 872254dd6b1f80cb95ee9e2e22980888533fc293 and fixed in 5.4.262 with commit b4f0e605a508f6d7cda6df2f03a0c676b778b1fe |
| Issue introduced in 2.6.24 with commit 872254dd6b1f80cb95ee9e2e22980888533fc293 and fixed in 5.10.202 with commit 396baca6683f415b5bc2b380289387bef1406edc |
| Issue introduced in 2.6.24 with commit 872254dd6b1f80cb95ee9e2e22980888533fc293 and fixed in 5.15.140 with commit 53064e8239dd2ecfefc5634e991f1025abc2ee0c |
| Issue introduced in 2.6.24 with commit 872254dd6b1f80cb95ee9e2e22980888533fc293 and fixed in 6.1.64 with commit 19554aa901b5833787df4417a05ccdebf351b7f4 |
| Issue introduced in 2.6.24 with commit 872254dd6b1f80cb95ee9e2e22980888533fc293 and fixed in 6.5.13 with commit 87c49806a37f88eddde3f537c162fd0c2834170c |
| Issue introduced in 2.6.24 with commit 872254dd6b1f80cb95ee9e2e22980888533fc293 and fixed in 6.6.3 with commit d98c91215a5748a0f536e7ccea26027005196859 |
| Issue introduced in 2.6.24 with commit 872254dd6b1f80cb95ee9e2e22980888533fc293 and fixed in 6.7 with commit 3cffa2ddc4d3fcf70cde361236f5a614f81a09b2 |
| |
| 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-52784 |
| 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: |
| drivers/net/bonding/bond_main.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/b4f0e605a508f6d7cda6df2f03a0c676b778b1fe |
| https://git.kernel.org/stable/c/396baca6683f415b5bc2b380289387bef1406edc |
| https://git.kernel.org/stable/c/53064e8239dd2ecfefc5634e991f1025abc2ee0c |
| https://git.kernel.org/stable/c/19554aa901b5833787df4417a05ccdebf351b7f4 |
| https://git.kernel.org/stable/c/87c49806a37f88eddde3f537c162fd0c2834170c |
| https://git.kernel.org/stable/c/d98c91215a5748a0f536e7ccea26027005196859 |
| https://git.kernel.org/stable/c/3cffa2ddc4d3fcf70cde361236f5a614f81a09b2 |