CVE-2021-47274 in Linux
Summary
by MITRE • 05/21/2024
In the Linux kernel, the following vulnerability has been resolved:
tracing: Correct the length check which causes memory corruption
We've suffered from severe kernel crashes due to memory corruption on our production environment, like,
Call Trace: [1640542.554277] general protection fault: 0000 [#1] SMP PTI
[1640542.554856] CPU: 17 PID: 26996 Comm: python Kdump: loaded Tainted:G
[1640542.556629] RIP: 0010:kmem_cache_alloc+0x90/0x190
[1640542.559074] RSP: 0018:ffffb16faa597df8 EFLAGS: 00010286
[1640542.559587] RAX: 0000000000000000 RBX: 0000000000400200 RCX:
0000000006e931bf [1640542.560323] RDX: 0000000006e931be RSI: 0000000000400200 RDI:
ffff9a45ff004300 [1640542.560996] RBP: 0000000000400200 R08: 0000000000023420 R09:
0000000000000000 [1640542.561670] R10: 0000000000000000 R11: 0000000000000000 R12:
ffffffff9a20608d [1640542.562366] R13: ffff9a45ff004300 R14: ffff9a45ff004300 R15:
696c662f65636976 [1640542.563128] FS: 00007f45d7c6f740(0000) GS:ffff9a45ff840000(0000)
knlGS:0000000000000000 [1640542.563937] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[1640542.564557] CR2: 00007f45d71311a0 CR3: 000000189d63e004 CR4:
00000000003606e0 [1640542.565279] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
0000000000000000 [1640542.566069] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
0000000000000400 [1640542.566742] Call Trace:
[1640542.567009] anon_vma_clone+0x5d/0x170
[1640542.567417] __split_vma+0x91/0x1a0
[1640542.567777] do_munmap+0x2c6/0x320
[1640542.568128] vm_munmap+0x54/0x70
[1640542.569990] __x64_sys_munmap+0x22/0x30
[1640542.572005] do_syscall_64+0x5b/0x1b0
[1640542.573724] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[1640542.575642] RIP: 0033:0x7f45d6e61e27
James Wang has reproduced it stably on the latest 4.19 LTS. After some debugging, we finally proved that it's due to ftrace buffer out-of-bound access using a debug tool as follows: [ 86.775200] BUG: Out-of-bounds write at addr 0xffff88aefe8b7000
[ 86.780806] no_context+0xdf/0x3c0
[ 86.784327] __do_page_fault+0x252/0x470
[ 86.788367] do_page_fault+0x32/0x140
[ 86.792145] page_fault+0x1e/0x30
[ 86.795576] strncpy_from_unsafe+0x66/0xb0
[ 86.799789] fetch_memory_string+0x25/0x40
[ 86.804002] fetch_deref_string+0x51/0x60
[ 86.808134] kprobe_trace_func+0x32d/0x3a0
[ 86.812347] kprobe_dispatcher+0x45/0x50
[ 86.816385] kprobe_ftrace_handler+0x90/0xf0
[ 86.820779] ftrace_ops_assist_func+0xa1/0x140
[ 86.825340] 0xffffffffc00750bf
[ 86.828603] do_sys_open+0x5/0x1f0
[ 86.832124] do_syscall_64+0x5b/0x1b0
[ 86.835900] entry_SYSCALL_64_after_hwframe+0x44/0xa9
commit b220c049d519 ("tracing: Check length before giving out the filter buffer") adds length check to protect trace data overflow introduced in 0fc1b09ff1ff, seems that this fix can't prevent overflow entirely, the length check should also take the sizeof entry->array[0] into account, since this array[0] is filled the
length of trace data and occupy addtional space and risk overflow.
If you want to get best quality of vulnerability data, you may have to visit VulDB.
Analysis
by VulDB Data Team • 08/07/2026
The vulnerability identified as CVE-2021-47274 resides within the Linux kernel's tracing subsystem, specifically impacting how memory is allocated and managed during trace data processing. This flaw manifests as a memory corruption issue that can lead to severe system instability and kernel crashes, as evidenced by the call trace showing a general protection fault and subsequent memory access violations. The vulnerability arises from an insufficient length check in the tracing mechanism that fails to account for the additional space required by the array[0] element which stores the length of trace data, thereby creating an out-of-bounds write condition.
The technical root cause of this vulnerability is found in the ftrace buffer handling logic where a length validation check was implemented to prevent buffer overflows but was incomplete. The original fix introduced in commit b220c049d519 attempted to address an earlier overflow issue referenced in commit 0fc1b09ff1ff, yet it overlooked the fact that the trace data structure includes an array[0] element that consumes additional space. This element is used to store the length of the trace data itself, creating a scenario where the length check does not properly account for this overhead, leading to memory corruption when the trace buffer is accessed beyond its allocated boundaries. The issue is particularly dangerous because it occurs during kernel memory allocation operations, specifically within kmem_cache_alloc, indicating that the corruption affects kernel heap management directly.
The operational impact of this vulnerability extends beyond simple system crashes, as it can result in complete system hangs or unpredictable behavior that may persist until a reboot. The stability issues reported in production environments demonstrate that this vulnerability can be reliably triggered under normal operating conditions, making it a critical concern for any system relying on kernel tracing capabilities. The vulnerability affects systems using the 4.19 LTS kernel version and potentially other kernel versions where the tracing subsystem is enabled. The out-of-bounds write conditions can be exploited to corrupt kernel memory structures, potentially leading to privilege escalation or denial of service attacks, particularly when the tracing subsystem is actively used for debugging or monitoring purposes.
Mitigation strategies for CVE-2021-47274 should prioritize applying the official kernel patches that correct the length check logic to properly account for the array[0] element overhead in trace data structures. System administrators should ensure that all production systems are updated to kernel versions containing the fix, which specifically addresses the buffer boundary calculation error in the tracing subsystem. Additionally, organizations should consider disabling tracing features when not actively needed, particularly in production environments where stability is paramount. Monitoring for kernel crash reports or memory corruption events can help identify systems that may not have been properly patched, while implementing proper kernel hardening measures such as kernel page table isolation and memory corruption detection tools can provide additional defense layers against exploitation attempts. This vulnerability aligns with CWE-129 and CWE-787, representing issues in input validation and out-of-bounds access respectively, and can be mapped to ATT&CK techniques involving privilege escalation and system stability compromise through kernel-level memory corruption.