CVE-2026-63809 in Linuxinfo

Summary

by MITRE • 07/19/2026

In the Linux kernel, the following vulnerability has been resolved:

bpf: use kvfree() for replaced sysctl write buffer

proc_sys_call_handler() allocates its temporary sysctl buffer with kvzalloc() and passes it to __cgroup_bpf_run_filter_sysctl(). Since kvzalloc() may fall back to vmalloc() for large allocations, freeing that buffer with kfree() is wrong and can corrupt memory.

Use kvfree() to safely handle both kmalloc and kvzalloc()/vmalloc allocations.

The bug was first flagged by an experimental analysis tool we are developing for kernel memory-management bugs while analyzing v6.13-rc1. The tool is still under development and is not yet publicly available. Manual inspection confirms that the bug is still present in v7.1-rc5.

Reproduced the bug based on v7.1-rc4 in a QEMU x86_64 guest booted with KASAN and CONFIG_FAILSLAB enabled. To exercise the replacement path, the test tree also included the accompanying fix for the stale ret == 1 check in __cgroup_bpf_run_filter_sysctl(). The reproducer confines failslab injections to the proc_sys_call_handler() range, uses stacktrace-depth=32, and injects fail-nth=1 while writing 8191 bytes to /proc/sys/kernel/domainname from a task in the target cgroup. Under that setup, fail-nth=1 triggered the fault:

BUG: unable to handle page fault for address: ffffeb0200024d48 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 0 P4D 0 Oops: Oops: 0000 SMP KASAN NOPTI CPU: 2 UID: 0 PID: 209 Comm: repro_proc_sys_ Not tainted 7.1.0-rc4-00686-g97625979a5d4 PREEMPT(lazy) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014 RIP: 0010:kfree+0x6e/0x510 ... Call Trace: <TASK> ? __cgroup_bpf_run_filter_sysctl+0x626/0xc30 __cgroup_bpf_run_filter_sysctl+0x74d/0xc30 ? __pfx___cgroup_bpf_run_filter_sysctl+0x10/0x10 ? srso_return_thunk+0x5/0x5f ? __kvmalloc_node_noprof+0x345/0x870 ? proc_sys_call_handler+0x250/0x480 ? srso_return_thunk+0x5/0x5f proc_sys_call_handler+0x3a2/0x480 ? __pfx_proc_sys_call_handler+0x10/0x10 ? srso_return_thunk+0x5/0x5f ? selinux_file_permission+0x39f/0x500 ? srso_return_thunk+0x5/0x5f ? lock_is_held_type+0x9e/0x120 vfs_write+0x98e/0x1000 ... </TASK>

With this fix applied on top of the same test setup, rerunning the reproducer with fail-nth=1 yields no corresponding Oops reports.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Analysis

by VulDB Data Team • 07/19/2026

The vulnerability resides within the linux kernel's handling of sysctl operations in conjunction with bpf cgroup filters, specifically in how memory allocated for temporary buffers is freed. The flaw occurs in the proc_sys_call_handler function which uses kvzalloc() to allocate a temporary buffer for sysctl operations. This allocation mechanism can fallback to vmalloc() when dealing with large memory requests, creating a scenario where traditional kfree() usage becomes inappropriate and potentially leads to memory corruption.

The technical implementation issue stems from the mismatch between allocation and deallocation methods. When kvzalloc() is invoked for sysctl buffer management, it may internally utilize either kmalloc or vmalloc depending on the requested size. The subsequent call to kfree() for buffer cleanup does not account for this potential vmalloc allocation path, resulting in improper memory management that can cause page faults and system instability. This pattern directly violates proper kernel memory management practices where allocation and deallocation methods must be consistent.

The operational impact of this vulnerability manifests as potential system crashes, memory corruption, and denial of service conditions. The bug was detected through an experimental analysis tool designed to identify kernel memory-management issues, demonstrating that even recent kernel versions remain susceptible to such flaws. The reproducer setup using QEMU with KASAN and CONFIG_FAILSLAB enabled successfully triggers the condition by forcing vmalloc allocation paths while maintaining the incorrect kfree() usage pattern.

The fix implements a proper solution by replacing kfree() with kvfree(), which correctly handles both kmalloc and vmalloc allocations through a unified interface designed specifically for this purpose. This change aligns with kernel best practices and prevents the memory corruption that would otherwise occur during buffer deallocation. The vulnerability can be classified under CWE-762, representing improper deallocation of memory, and relates to ATT&CK technique T1059.006 for system command execution through kernel-level manipulation.

The root cause analysis reveals a fundamental flaw in kernel resource management where the assumption that all allocations follow a single allocation path proves incorrect in practice. This vulnerability highlights the importance of proper memory management patterns in kernel development and demonstrates how seemingly minor implementation details can lead to critical system stability issues. The fix addresses this by ensuring consistent handling of memory allocated through the kernel's flexible allocation mechanisms, providing robustness against various allocation scenarios while maintaining system integrity.

The presence of this issue across multiple kernel versions including v7.1-rc5 indicates a persistent gap in kernel memory management validation processes and suggests that automated analysis tools should be more rigorously applied to kernel codebases to catch such subtle but critical flaws before they can be exploited.

Responsible

Linux

Reservation

07/19/2026

Disclosure

07/19/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

low

Sources

Do you know our Splunk app?

Download it now for free!