CVE-2025-21922: ppp: Fix KMSAN uninit-value warning with bpf
In the Linux kernel, the following vulnerability has been resolved:
ppp: Fix KMSAN uninit-value warning with bpf
Syzbot caught an "KMSAN: uninit-value" warning [1], which is caused by the
ppp driver not initializing a 2-byte header when using socket filter.
The following code can generate a PPP filter BPF program:
'''
struct bpf_program fp;
pcap_t *handle;
handle = pcap_open_dead(DLT_PPP_PPPD, 65535);
pcap_compile(handle, &fp, "ip and outbound", 0, 0);
bpf_dump(&fp, 1);
'''
Its output is:
'''
(000) ldh [2]
(001) jeq #0x21 jt 2 jf 5
(002) ldb [0]
(003) jeq #0x1 jt 4 jf 5
(004) ret #65535
(005) ret #0
'''
Wen can find similar code at the following link:
https://github.com/ppp-project/ppp/blob/master/pppd/options.c#L1680
The maintainer of this code repository is also the original maintainer
of the ppp driver.
As you can see the BPF program skips 2 bytes of data and then reads the
'Protocol' field to determine if it's an IP packet. Then it read the first
byte of the first 2 bytes to determine the direction.
The issue is that only the first byte indicating direction is initialized
in current ppp driver code while the second byte is not initialized.
For normal BPF programs generated by libpcap, uninitialized data won't be
used, so it's not a problem. However, for carefully crafted BPF programs,
such as those generated by syzkaller [2], which start reading from offset
0, the uninitialized data will be used and caught by KMSAN.
[1] https://syzkaller.appspot.com/bug?extid=853242d9c9917165d791
[2] https://syzkaller.appspot.com/text?tag=ReproC&x=11994913980000
Security readout for executives and security teams
Plain-English summary
CVE-2025-21922 is a Linux kernel PPP driver bug where one byte of a small header could remain uninitialized when socket filters are used. The published impact is local availability loss, not data theft or remote compromise. It is not listed as KEV exploited, so treat it as a normal kernel maintenance priority unless exposed on multi-user systems.
Executive priority
Handle through the next kernel patch cycle, with faster action for shared Linux hosts or environments allowing local untrusted users. This is not supported by the provided evidence as an emergency internet-facing issue.
Technical view
The PPP driver initializes only the direction byte of a two-byte header used with PPP socket filter BPF handling. Normal libpcap-generated filters reportedly avoid the uninitialized byte, but crafted filters can read from offset 0 and trigger KMSAN uninitialized-value behavior. CVSS 3.1 is 5.5 with local access, low complexity, low privileges, and high availability impact.
Likely exposure
Exposure is most relevant to Linux systems with affected kernel versions and PPP driver functionality available to local low-privileged users. The source bundle does not establish remote attackability, confidentiality impact, integrity impact, or broad product exposure beyond Linux kernel PPP handling.
Exploitation context
The CVE record cites syzbot and syzkaller-generated repro material, but KEV is false and the provided sources do not state active exploitation in the wild. Exploitation requires local access and low privileges according to the CVSS vector.
Researcher notes
The root cause is CWE-908: use of uninitialized resource. The affected path involves PPP socket filter BPF handling, where crafted filters can inspect bytes normal libpcap filters do not use. Evidence is strongest for a kernel correctness and availability issue found by fuzzing.
Mitigation direction
Update affected Linux kernels using vendor-supported packages or stable kernel fixes.
Review Debian LTS advisories if running affected Debian kernel packages.
Confirm distribution guidance before applying non-package kernel patches.
Prioritize multi-user systems where local users can exercise PPP-related filtering paths.
Validation and detection
Inventory Linux kernel versions against vendor advisories and referenced stable commits.
Confirm deployed kernels include the PPP uninitialized header fix.
Check whether PPP driver functionality is present on exposed multi-user systems.
Track vendor package advisories for exact fixed package versions.
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.
cwe · low confidence lookup
CWE-908: Exact CWE lookup
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
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.
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.
CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.
CWE-908 · source CWE mapping
Use of Uninitialized Resource
Use of Uninitialized Resource represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.