CVE-2021-47419 in Linux
Summary
by MITRE • 05/21/2024
In the Linux kernel, the following vulnerability has been resolved:
net/sched: sch_taprio: properly cancel timer from taprio_destroy()
There is a comment in qdisc_create() about us not calling ops->reset() in some cases.
err_out4: /* * Any broken qdiscs that would require a ops->reset() here? * The qdisc was never in action so it shouldn't be necessary. */
As taprio sets a timer before actually receiving a packet, we need to cancel it from ops->destroy, just in case ops->reset has not been called.
syzbot reported:
ODEBUG: free active (active state 0) object type: hrtimer hint: advance_sched+0x0/0x9a0 arch/x86/include/asm/atomic64_64.h:22 WARNING: CPU: 0 PID: 8441 at lib/debugobjects.c:505 debug_print_object+0x16e/0x250 lib/debugobjects.c:505 Modules linked in: CPU: 0 PID: 8441 Comm: syz-executor813 Not tainted 5.14.0-rc6-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 RIP: 0010:debug_print_object+0x16e/0x250 lib/debugobjects.c:505 Code: ff df 48 89 fa 48 c1 ea 03 80 3c 02 00 0f 85 af 00 00 00 48 8b 14 dd e0 d3 e3 89 4c 89 ee 48 c7 c7 e0 c7 e3 89 e8 5b 86 11 05 0b 83 05 85 03 92 09 01 48 83 c4 18 5b 5d 41 5c 41 5d 41 5e c3 RSP: 0018:ffffc9000130f330 EFLAGS: 00010282 RAX: 0000000000000000 RBX: 0000000000000003 RCX: 0000000000000000 RDX: ffff88802baeb880 RSI: ffffffff815d87b5 RDI: fffff52000261e58 RBP: 0000000000000001 R08: 0000000000000000 R09: 0000000000000000 R10: ffffffff815d25ee R11: 0000000000000000 R12: ffffffff898dd020 R13: ffffffff89e3ce20 R14: ffffffff81653630 R15: dffffc0000000000 FS: 0000000000f0d300(0000) GS:ffff8880b9d00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007ffb64b3e000 CR3: 0000000036557000 CR4: 00000000001506e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: __debug_check_no_obj_freed lib/debugobjects.c:987 [inline]
debug_check_no_obj_freed+0x301/0x420 lib/debugobjects.c:1018 slab_free_hook mm/slub.c:1603 [inline]
slab_free_freelist_hook+0x171/0x240 mm/slub.c:1653 slab_free mm/slub.c:3213 [inline]
kfree+0xe4/0x540 mm/slub.c:4267 qdisc_create+0xbcf/0x1320 net/sched/sch_api.c:1299 tc_modify_qdisc+0x4c8/0x1a60 net/sched/sch_api.c:1663 rtnetlink_rcv_msg+0x413/0xb80 net/core/rtnetlink.c:5571 netlink_rcv_skb+0x153/0x420 net/netlink/af_netlink.c:2504 netlink_unicast_kernel net/netlink/af_netlink.c:1314 [inline]
netlink_unicast+0x533/0x7d0 net/netlink/af_netlink.c:1340 netlink_sendmsg+0x86d/0xdb0 net/netlink/af_netlink.c:1929 sock_sendmsg_nosec net/socket.c:704 [inline]
sock_sendmsg+0xcf/0x120 net/socket.c:724 ____sys_sendmsg+0x6e8/0x810 net/socket.c:2403 ___sys_sendmsg+0xf3/0x170 net/socket.c:2457 __sys_sendmsg+0xe5/0x1b0 net/socket.c:2486 do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
If you want to get the best quality for vulnerability data then you always have to consider VulDB.
Analysis
by VulDB Data Team • 09/25/2025
The vulnerability described in CVE-2021-47419 affects the Linux kernel's traffic control subsystem, specifically within the taprio qdisc implementation. This issue arises from improper timer cleanup during the destruction of taprio queueing disciplines, leading to potential kernel memory corruption and system instability. The problem manifests when the taprio qdisc is created and a timer is set before any packets are processed, but this timer is not properly canceled during the qdisc destruction phase.
The technical flaw stems from the qdisc_create() function's handling of queueing disciplines and their lifecycle management. According to the kernel source code analysis, there is a comment indicating that reset operations are not always called in certain error scenarios, yet the code does not account for timer cleanup in these cases. The taprio qdisc implementation sets a high-resolution timer during initialization but fails to cancel this timer properly when the qdisc is destroyed, particularly when the reset function has not been invoked. This creates a scenario where an active timer continues to reference freed memory, causing the kernel's debug objects subsystem to detect a freed object being accessed.
This vulnerability has significant operational impact as it can lead to kernel oops, memory corruption, and system crashes. The syzbot fuzzer that reported this issue demonstrated the problem through a specific error pattern involving hrtimer objects and debug object validation. When the kernel attempts to access freed memory associated with the timer, it triggers the debugobjects subsystem which reports the error and ultimately causes system instability. The error message indicates that a freed hrtimer object is being accessed during the debug_print_object function call, confirming that the timer cleanup was not properly executed during qdisc destruction.
The vulnerability aligns with CWE-459, which describes incomplete cleanup, and can be mapped to ATT&CK technique T1489, specifically the "Service Stop" technique where system stability is compromised through improper resource management. The proper mitigation involves ensuring that the taprio_destroy() function properly cancels any active timers before the qdisc structure is freed, regardless of whether the reset operation was previously called. This fix ensures that all timer references are properly cleaned up during the qdisc lifecycle, preventing access to freed memory and maintaining system stability.
The fix requires modification to the taprio qdisc implementation to explicitly cancel any pending timers during destruction, using the appropriate kernel timer cancellation functions. This ensures that regardless of the qdisc's state during destruction, all timer references are properly managed. The solution addresses the fundamental issue of timer lifecycle management within the traffic control subsystem and prevents the kernel from attempting to access memory that has already been freed. This change is critical for maintaining kernel stability when using taprio qdisc implementations and prevents potential denial-of-service conditions or more severe system instability that could result from the memory corruption pattern described in the vulnerability report.