CVE-2022-49228: bpf: Fix a btf decl_tag bug when tagging a function
In the Linux kernel, the following vulnerability has been resolved:
bpf: Fix a btf decl_tag bug when tagging a function
syzbot reported a btf decl_tag bug with stack trace below:
general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN
KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
CPU: 0 PID: 3592 Comm: syz-executor914 Not tainted 5.16.0-syzkaller-11424-gb7892f7d5cb2 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
RIP: 0010:btf_type_vlen include/linux/btf.h:231 [inline]
RIP: 0010:btf_decl_tag_resolve+0x83e/0xaa0 kernel/bpf/btf.c:3910
...
Call Trace:
<TASK>
btf_resolve+0x251/0x1020 kernel/bpf/btf.c:4198
btf_check_all_types kernel/bpf/btf.c:4239 [inline]
btf_parse_type_sec kernel/bpf/btf.c:4280 [inline]
btf_parse kernel/bpf/btf.c:4513 [inline]
btf_new_fd+0x19fe/0x2370 kernel/bpf/btf.c:6047
bpf_btf_load kernel/bpf/syscall.c:4039 [inline]
__sys_bpf+0x1cbb/0x5970 kernel/bpf/syscall.c:4679
__do_sys_bpf kernel/bpf/syscall.c:4738 [inline]
__se_sys_bpf kernel/bpf/syscall.c:4736 [inline]
__x64_sys_bpf+0x75/0xb0 kernel/bpf/syscall.c:4736
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x44/0xae
The kasan error is triggered with an illegal BTF like below:
type 0: void
type 1: int
type 2: decl_tag to func type 3
type 3: func to func_proto type 8
The total number of types is 4 and the type 3 is illegal
since its func_proto type is out of range.
Currently, the target type of decl_tag can be struct/union, var or func.
Both struct/union and var implemented their own 'resolve' callback functions
and hence handled properly in kernel.
But func type doesn't have 'resolve' callback function. When
btf_decl_tag_resolve() tries to check func type, it tries to get
vlen of its func_proto type, which triggered the above kasan error.
To fix the issue, btf_decl_tag_resolve() needs to do btf_func_check()
before trying to accessing func_proto type.
In the current implementation, func type is checked with
btf_func_check() in the main checking function btf_check_all_types().
To fix the above kasan issue, let us implement 'resolve' callback
func type properly. The 'resolve' callback will be also called
in btf_check_all_types() for func types.
Security readout for executives and security teams
Plain-English summary
CVE-2022-49228 is a Linux kernel BPF/BTF validation bug. A malformed BTF object can cause a kernel general protection fault during BPF type loading. The source describes a crash, not data theft or remote compromise. Business urgency is highest for Linux systems that run affected kernels and allow local users or workloads to use BPF interfaces.
Executive priority
Treat as a stability and availability risk for affected Linux systems, especially shared hosts. No public source here supports active exploitation or remote attack. Patch through normal kernel update channels, with higher priority where untrusted local users or workloads can interact with BPF.
Technical view
The bug is in kernel/bpf/btf.c handling of BTF decl_tag applied to a function. For an illegal BTF where a func points to an out-of-range func_proto, btf_decl_tag_resolve() accessed func_proto details before proper func validation, triggering a KASAN null-pointer dereference/general protection fault. The fix adds proper func resolve handling and btf_func_check() before access.
Likely exposure
Exposure appears local and kernel-specific. Systems running affected Linux 5.16-era kernels with reachable BPF BTF load functionality are the primary concern. Container hosts, developer systems, and multi-tenant Linux servers deserve review. The provided data does not establish remote exposure or privilege escalation.
Exploitation context
The source cites syzbot discovery and a crashing kernel trace through the bpf syscall BTF load path. CISA KEV status is false, and no cited source states active exploitation. Practical exploitability depends on local access, kernel version, BPF configuration, and permissions.
Researcher notes
Affected-version data in the bundle is limited and should be reconciled with distro advisories. The core issue is missing func-type resolve validation for decl_tag targets before accessing func_proto metadata. The references are Linux stable commits; review them to map exact backports.
Mitigation direction
Update to a vendor kernel containing the referenced stable fixes.
Prioritize multi-user and container-host Linux systems first.
Review vendor advisories for exact fixed package versions.
Restrict unnecessary BPF access according to vendor guidance.
Monitor for kernel crash reports involving btf_decl_tag_resolve.
Validation and detection
Inventory Linux kernel versions across affected fleets.
Check whether installed kernels include the referenced stable commits.
Confirm vendor packages map to fixed kernel builds.
Review BPF availability and policy on shared systems.
Search kernel logs for related general protection faults.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2022-49228 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
0CVSS vectors
3Timeline events
0ADP providers
4Source links
Vulnerability timeline
Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.
CVE reservedCVE Program
The CVE ID was reserved by the assigning CNA.
CVE publishedCVE Program
The CVE record was published.
Feb 26, 2025, 01:55 UTC (UTC+00:00)
CVE updatedCVE Program
The CVE record metadata indicates this as the latest update time.