UBUNTU-CVE-2024-57996
Vulnerability Summary
Timeline
Description
In the Linux kernel, the following vulnerability has been resolved: net_sched: sch_sfq: don't allow 1 packet limit The current implementation does not work correctly with a limit of 1. iproute2 actually checks for this and this patch adds the check in kernel as well. This fixes the following syzkaller reported crash: UBSAN: array-index-out-of-bounds in net/sched/sch_sfq.c:210:6 index 65535 is out of range for type 'struct sfq_head[128]' CPU: 0 PID: 2569 Comm: syz-executor101 Not tainted 5.10.0-smp-DEV #1 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024 Call Trace: __dump_stack lib/dump_stack.c:79 [inline] dump_stack+0x125/0x19f lib/dump_stack.c:120 ubsan_epilogue lib/ubsan.c:148 [inline] __ubsan_handle_out_of_bounds+0xed/0x120 lib/ubsan.c:347 sfq_link net/sched/sch_sfq.c:210 [inline] sfq_dec+0x528/0x600 net/sched/sch_sfq.c:238 sfq_dequeue+0x39b/0x9d0 net/sched/sch_sfq.c:500 sfq_reset+0x13/0x50 net/sched/sch_sfq.c:525 qdisc_reset+0xfe/0x510 net/sched/sch_generic.c:1026 tbf_reset+0x3d/0x100 net/sched/sch_tbf.c:319 qdisc_reset+0xfe/0x510 net/sched/sch_generic.c:1026 dev_reset_queue+0x8c/0x140 net/sched/sch_generic.c:1296 netdev_for_each_tx_queue include/linux/netdevice.h:2350 [inline] dev_deactivate_many+0x6dc/0xc20 net/sched/sch_generic.c:1362 __dev_close_many+0x214/0x350 net/core/dev.c:1468 dev_close_many+0x207/0x510 net/core/dev.c:1506 unregister_netdevice_many+0x40f/0x16b0 net/core/dev.c:10738 unregister_netdevice_queue+0x2be/0x310 net/core/dev.c:10695 unregister_netdevice include/linux/netdevice.h:2893 [inline] __tun_detach+0x6b6/0x1600 drivers/net/tun.c:689 tun_detach drivers/net/tun.c:705 [inline] tun_chr_close+0x104/0x1b0 drivers/net/tun.c:3640 __fput+0x203/0x840 fs/file_table.c:280 task_work_run+0x129/0x1b0 kernel/task_work.c:185 exit_task_work include/linux/task_work.h:33 [inline] do_exit+0x5ce/0x2200 kernel/exit.c:931 do_group_exit+0x144/0x310 kernel/exit.c:1046 __do_sys_exit_group kernel/exit.c:1057 [inline] __se_sys_exit_group kernel/exit.c:1055 [inline] __x64_sys_exit_group+0x3b/0x40 kernel/exit.c:1055 do_syscall_64+0x6c/0xd0 entry_SYSCALL_64_after_hwframe+0x61/0xcb RIP: 0033:0x7fe5e7b52479 Code: Unable to access opcode bytes at RIP 0x7fe5e7b5244f. RSP: 002b:00007ffd3c800398 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7 RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fe5e7b52479 RDX: 000000000000003c RSI: 00000000000000e7 RDI: 0000000000000000 RBP: 00007fe5e7bcd2d0 R08: ffffffffffffffb8 R09: 0000000000000014 R10: 0000000000000000 R11: 0000000000000246 R12: 00007fe5e7bcd2d0 R13: 0000000000000000 R14: 00007fe5e7bcdd20 R15: 00007fe5e7b24270 The crash can be also be reproduced with the following (with a tc recompiled to allow for sfq limits of 1): tc qdisc add dev dummy0 handle 1: root tbf rate 1Kbit burst 100b lat 1s ../iproute2-6.9.0/tc/tc qdisc add dev dummy0 handle 2: parent 1:10 sfq limit 1 ifconfig dummy0 up ping -I dummy0 -f -c2 -W0.1 8.8.8.8 sleep 1 Scenario that triggers the crash: * the first packet is sent and queued in TBF and SFQ; qdisc qlen is 1 * TBF dequeues: it peeks from SFQ which moves the packet to the gso_skb list and keeps qdisc qlen set to 1. TBF is out of tokens so it schedules itself for later. * the second packet is sent and TBF tries to queues it to SFQ. qdisc qlen is now 2 and because the SFQ limit is 1 the packet is dropped by SFQ. At this point qlen is 1, and all of the SFQ slots are empty, however q->tail is not NULL. At this point, assuming no more packets are queued, when sch_dequeue runs again it will decrement the qlen for the current empty slot causing an underflow and the subsequent out of bounds access.
CVSS Metrics
- v3.1•MEDIUM•Score: 5.5CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Affected Systems
- ubuntu•linux
all | < 4.4.0-272.306 | < 4.15.0-241.253 | < 5.4.0-221.241 | < 5.15.0-153.163 | < 6.8.0-79.79
- ubuntu•linux-allwinner-5.19
all
- ubuntu•linux-aws
< 4.4.0-1147.153 | < 4.4.0-1185.200 | < 4.15.0-1184.197 | < 5.4.0-1150.160 | < 5.15.0-1091.98 | < 6.8.0-1036.38
- ubuntu•linux-aws-5.0
all
- ubuntu•linux-aws-5.11
all
- ubuntu•linux-aws-5.13
all
- ubuntu•linux-aws-5.15
< 5.15.0-1091.98~20.04.1
- ubuntu•linux-aws-5.19
all
- ubuntu•linux-aws-5.3
all
- ubuntu•linux-aws-5.4
< 5.4.0-1150.160~18.04.1
- ubuntu•linux-aws-5.8
all
- ubuntu•linux-aws-6.2
all
- ubuntu•linux-aws-6.5
all
- ubuntu•linux-aws-6.8
< 6.8.0-1036.38~22.04.1
- ubuntu•linux-aws-fips
< 4.15.0-2122.128 | all | < 5.4.0-1150.160+fips1 | < 5.15.0-1091.98+fips1 | < 6.8.0-1036.38+fips1
- ubuntu•linux-aws-hwe
< 4.15.0-1184.197~16.04.1
- ubuntu•linux-azure
< 4.15.0-1192.207~14.04.1 | < 4.15.0-1192.207~16.04.1 | all | < 5.4.0-1154.161 | < 5.15.0-1095.104 | < 6.8.0-1038.44
- ubuntu•linux-azure-4.15
< 4.15.0-1192.207
- ubuntu•linux-azure-5.11
all
- ubuntu•linux-azure-5.13
all
- ubuntu•linux-azure-5.15
< 5.15.0-1095.104~20.04.1
- ubuntu•linux-azure-5.19
all
- ubuntu•linux-azure-5.3
all
- ubuntu•linux-azure-5.4
< 5.4.0-1154.161~18.04.1
- ubuntu•linux-azure-5.8
all
- ubuntu•linux-azure-6.11
< 6.11.0-1015.15~24.04.1
- ubuntu•linux-azure-6.2
all
- ubuntu•linux-azure-6.5
all
- ubuntu•linux-azure-6.8
< 6.8.0-1036.42~22.04.1
- ubuntu•linux-azure-edge
all
- ubuntu•linux-azure-fde
all | all | all
- ubuntu•linux-azure-fde-5.19
all
- ubuntu•linux-azure-fde-6.17
all
- ubuntu•linux-azure-fde-6.2
all
- ubuntu•linux-azure-fips
< 4.15.0-2101.107 | all | < 5.4.0-1155.162+fips1 | < 5.15.0-1095.104+fips1 | < 6.8.0-1040.46+fips1
- ubuntu•linux-azure-nvidia
< 6.8.0-1025.27
- ubuntu•linux-bluefield
< 5.15.0-1075.77 | < 5.4.0-1109.116 | < 5.15.0-1075.77 | all
- ubuntu•linux-fips
< 4.4.0-1117.124 | all | < 4.15.0-1139.150 | < 5.4.0-1124.134 | < 5.15.0-153.163+fips1 | < 6.8.0-79.79+fips1
- ubuntu•linux-gcp
< 4.15.0-1177.194~16.04.1 | all | < 5.4.0-1153.162 | < 5.15.0-1091.100 | < 6.8.0-1037.39
- ubuntu•linux-gcp-4.15
< 4.15.0-1177.194
- ubuntu•linux-gcp-5.11
all
- ubuntu•linux-gcp-5.13
all
- ubuntu•linux-gcp-5.15
< 5.15.0-1091.100~20.04.1
- ubuntu•linux-gcp-5.19
all
- ubuntu•linux-gcp-5.3
all
- ubuntu•linux-gcp-5.4
< 5.4.0-1153.162~18.04.1
- ubuntu•linux-gcp-5.8
all
- ubuntu•linux-gcp-6.11
< 6.11.0-1015.15~24.04.1
- ubuntu•linux-gcp-6.2
all
- ubuntu•linux-gcp-6.5
all
Showing first 50 affected entries in server-rendered view.
References (43)
- https://ubuntu.com/security/CVE-2024-57996
- https://www.cve.org/CVERecord?id=CVE-2024-57996
- https://git.kernel.org/linus/10685681bafce6febb39770f3387621bf5d67d0b
- https://git.kernel.org/stable/c/10685681bafce6febb39770f3387621bf5d67d0b
- https://git.kernel.org/stable/c/35d0137305ae2f97260a9047f445bd4434bd6cc7
- https://git.kernel.org/stable/c/7d8947f2153ee9c5ab4cb17861a11cc45f30e8c4
- https://git.kernel.org/stable/c/7fefc294204f10a3405f175f4ac2be16d63f135e
- https://git.kernel.org/stable/c/833e9a1c27b82024db7ff5038a51651f48f05e5e
- https://ubuntu.com/security/notices/USN-7521-1
- https://ubuntu.com/security/notices/USN-7521-2
- https://ubuntu.com/security/notices/USN-7521-3
- https://ubuntu.com/security/notices/USN-7651-1
- https://ubuntu.com/security/notices/USN-7652-1
- https://ubuntu.com/security/notices/USN-7653-1
- https://ubuntu.com/security/notices/USN-7651-2
- https://ubuntu.com/security/notices/USN-7651-3
- https://ubuntu.com/security/notices/USN-7651-4
- https://ubuntu.com/security/notices/USN-7651-5
- https://ubuntu.com/security/notices/USN-7651-6
- https://ubuntu.com/security/notices/USN-7725-1
- https://ubuntu.com/security/notices/USN-7725-2
- https://ubuntu.com/security/notices/USN-7726-1
- https://ubuntu.com/security/notices/USN-7726-2
- https://ubuntu.com/security/notices/USN-7726-3
- https://ubuntu.com/security/notices/USN-7727-1
- https://ubuntu.com/security/notices/USN-7727-2
- https://ubuntu.com/security/notices/USN-7727-3
- https://ubuntu.com/security/notices/USN-7726-4
- https://ubuntu.com/security/notices/USN-7725-3
- https://ubuntu.com/security/notices/USN-7754-1
- https://ubuntu.com/security/notices/USN-7754-2
- https://ubuntu.com/security/notices/USN-7755-1
- https://ubuntu.com/security/notices/USN-7755-2
- https://ubuntu.com/security/notices/USN-7726-5
- https://ubuntu.com/security/notices/USN-7755-3
- https://ubuntu.com/security/notices/USN-7776-1
- https://ubuntu.com/security/notices/USN-7779-1
- https://ubuntu.com/security/notices/USN-7802-1
- https://ubuntu.com/security/notices/USN-7809-1
- https://ubuntu.com/security/notices/USN-7819-1
- https://ubuntu.com/security/notices/USN-7820-1
- https://ubuntu.com/security/notices/USN-7832-1
- https://ubuntu.com/security/notices/USN-7819-2