CVE Database›Document archive›CVE-2024-58070

CVE-2024-58070

kernel: bpf: bpf_local_storage: Always use bpf_mem_alloc in PREEMPT_RT

Loading…

Severity

Low

Red Hat Product Security

4.4

CVSS 3.1

Review impact separately from score.

Published · March 6, 2025

Updated · October 17, 2026

Description

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

bpf: bpf_local_storage: Always use bpf_mem_alloc in PREEMPT_RT

In PREEMPT_RT, kmalloc(GFP_ATOMIC) is still not safe in non preemptible context. bpf_mem_alloc must be used in PREEMPT_RT. This patch is to enforce bpf_mem_alloc in the bpf_local_storage when CONFIG_PREEMPT_RT is enabled.

[ 35.118559] BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48 [ 35.118566] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1832, name: test_progs [ 35.118569] preempt_count: 1, expected: 0 [ 35.118571] RCU nest depth: 1, expected: 1 [ 35.118577] INFO: lockdep is turned off. ... [ 35.118647] __might_resched+0x433/0x5b0 [ 35.118677] rt_spin_lock+0xc3/0x290 [ 35.118700] ___slab_alloc+0x72/0xc40 [ 35.118723] __kmalloc_noprof+0x13f/0x4e0 [ 35.118732] bpf_map_kzalloc+0xe5/0x220 [ 35.118740] bpf_selem_alloc+0x1d2/0x7b0 [ 35.118755] bpf_local_storage_update+0x2fa/0x8b0 [ 35.118784] bpf_sk_storage_get_tracing+0x15a/0x1d0 [ 35.118791] bpf_prog_9a118d86fca78ebb_trace_inet_sock_set_state+0x44/0x66 [ 35.118795] bpf_trace_run3+0x222/0x400 [ 35.118820] __bpf_trace_inet_sock_set_state+0x11/0x20 [ 35.118824] trace_inet_sock_set_state+0x112/0x130 [ 35.118830] inet_sk_state_store+0x41/0x90 [ 35.118836] tcp_set_state+0x3b3/0x640

There is no need to adjust the gfp_flags passing to the bpf_mem_cache_alloc_flags() which only honors the GFP_KERNEL. The verifier has ensured GFP_KERNEL is passed only in sleepable context.

It has been an old issue since the first introduction of the bpf_local_storage ~5 years ago, so this patch targets the bpf-next.

bpf_mem_alloc is needed to solve it, so the Fixes tag is set to the commit when bpf_mem_alloc was first used in the bpf_local_storage.

Statement

A low impact vulnerability was found in the Linux kernel BPF local storage implementation. On kernels built with CONFIG_PREEMPT_RT, memory allocations performed by bpf_local_storage (for example through bpf_local_storage_update() called from a BPF tracing program using socket local storage) can invoke kmalloc(GFP_ATOMIC) from a non-preemptible context, which is not safe on PREEMPT_RT. As a result, a local user with the privileges required to load and run BPF programs on a PREEMPT_RT kernel can trigger a kernel BUG ("sleeping function called from invalid context"), causing a denial of service with no impact on confidentiality or integrity. Red Hat Enterprise Linux 6, 7, and 8, including their kernel-rt builds, are not affected because the vulnerable code is not present in those releases. The kernel and kernel-rt packages in Red Hat Enterprise Linux 9 and 10, as well as Red Hat In-Vehicle OS, are affected and the fix is currently deferred for these streams; the residual risk is limited to a local denial of service that requires privileged BPF access on a PREEMPT_RT configuration. The CVE.org score of 7.8 differs from Red Hat's severity of LOW (CVSS 4.4) because the CVE.org vector assumes high confidentiality and integrity impact, while this issue is a kernel BUG condition affecting availability only, consistent with the NIST score of 5.5 (AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).

CVSS score applicability

The CVSS score(s) listed for this vulnerability do not reflect the associated product's status, and are included for informational purposes to better understand the severity of this vulnerability.

Mitigation

Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.

CVSS / CWE

CVSS 3.1 · 4.4
CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H

CWE-99 · Improper Control of Resource Identifiers ('Resource Injection')