CVE-2024-58060

bpf: Reject struct_ops registration that uses module ptr and the module btf_id is missing

High · published March 6, 2025

CVSS v3.1
7.8
EPSS
0%
Percentile
10.0
In the wild
Unconfirmed
What it is

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

bpf: Reject struct_ops registration that uses module ptr and the module btf_id is missing

There is a UAF report in the bpf_struct_ops when CONFIG_MODULES=n.

In particular, the report is on tcp_congestion_ops that has

a "struct module *owner" member.

For struct_ops that has a "struct module *owner" member,

it can be extended either by the regular kernel module or

by the bpf_struct_ops. bpf_try_module_get() will be used

to do the refcounting and different refcount is done

based on the owner pointer. When CONFIG_MODULES=n,

the btf_id of the "struct module" is missing:

WARN: resolve_btfids: unresolved symbol module

Thus, the bpf_try_module_get() cannot do the correct refcounting.

Not all subsystem's struct_ops requires the "struct module *owner" member.

e.g. the recent sched_ext_ops.

This patch is to disable bpf_struct_ops registration if

the struct_ops has the "struct module *" member and the

"struct module" btf_id is missing. The btf_type_is_fwd() helper

is moved to the btf.h header file for this test.

This has happened since the beginning of bpf_struct_ops which has gone

through many changes. The Fixes tag is set to a recent commit that this

patch can apply cleanly. Considering CONFIG_MODULES=n is not

common and the age of the issue, targeting for bpf-next also.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00205 · 10.0th percentile
Published
2025-03-06T15:54Z
EPSS history
Timeline
  • 06 MAR 15:54Z
    bpf: Reject struct_ops registration that uses module ptr and the module btf_id is missing
    cvelistv5