Skip to main content

Linux Kernel EUVDEUVD-2026-45469

| CVE-2026-63803 HIGH
Use After Free (CWE-416)
2026-07-19 Linux GHSA-3hpx-wjcg-9r3x
7.8
CVSS 3.1 · Vendor: Linux
Share

Severity by source

Vendor (Linux) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
7.0 HIGH

Local access with CAP_NET_ADMIN gives PR:L; the timer-callback-versus-kfree race makes AC:H; kernel UAF yields high C/I/A within the unchanged scope.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE
HIGH
qualitative
Red Hat
5.5 MEDIUM
qualitative

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

5
Analysis Generated
Jul 20, 2026 - 15:34 vuln.today
CVSS changed
Jul 20, 2026 - 15:22 NVD
7.8 (HIGH)
Patch available
Jul 19, 2026 - 14:17 EUVD
CVE Published
Jul 19, 2026 - 12:02 cve.org
HIGH 7.8
CVE Published
Jul 19, 2026 - 12:02 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

hdlc_ppp: sync per-proto timers before freeing hdlc state

Each PPP control protocol (LCP/IPCP/IPV6CP) embedded in struct ppp registers a timer via timer_setup(). That struct ppp is the hdlc->state allocation, which detach_hdlc_protocol() frees with kfree() in both teardown paths: unregister_hdlc_device() and the re-attach inside attach_hdlc_protocol().

The ppp proto never registered a .detach callback, so detach_hdlc_protocol() performs no timer synchronization before the kfree(). The only cancel, timer_delete(&proto->timer) in ppp_cp_event(), is partial (it does not wait for a running callback) and only runs on the ->CLOSED transition; ppp_stop()/ppp_close() do not sync either. A ppp_timer callback already executing (blocked on ppp->lock) survives the kfree and then dereferences proto->state / ppp->lock in freed memory, leading to a use-after-free.

Fix this by adding a .detach helper that calls timer_shutdown_sync() on every per-proto timer. detach_hdlc_protocol() invokes proto->detach(dev) before kfree(hdlc->state), so timer_shutdown_sync() now runs on both free paths. timer_shutdown_sync() is used instead of timer_delete_sync() because the keepalive path re-arms the timer through add_timer()/mod_timer() and shutdown blocks any re-activation during teardown.

Initialize the per-protocol timers in ppp_ioctl() when the protocol is attached, and remove the now-redundant timer_setup() from ppp_start(), so that the timers are initialized exactly once at attach time and ppp_timer_release() never operates on uninitialized timer_list structures. attach_hdlc_protocol() uses kmalloc() (not kzalloc), so struct ppp's protos[i].timer is uninitialized garbage until the first timer_setup(); without this init-at-attach, attaching the PPP protocol without ever bringing the device up would leave timer_shutdown_sync() operating on uninitialized memory in .detach. Moving the init out of ppp_start() (which only runs on NETDEV_UP) into the attach path makes the initialization unconditional and avoids initializing the same timer_list twice.

This bug was found by static analysis.

AnalysisAI

Local privilege escalation via kernel use-after-free in the Linux kernel's hdlc_ppp WAN driver allows a user able to configure synchronous HDLC/PPP network devices to corrupt kernel memory. The bug stems from per-protocol LCP/IPCP/IPV6CP timers embedded in the hdlc->state (struct ppp) allocation being freed with kfree() during device teardown or protocol re-attach without synchronizing a possibly-running timer callback, so an in-flight ppp_timer dereferences freed memory. EPSS is low (0.17%, 7th percentile) and there is no public exploit identified at time of analysis; not listed in CISA KEV.

Technical ContextAI

The affected code is the HDLC (High-Level Data Link Control) PPP encapsulation layer (drivers/net/wan/hdlc_ppp.c) used for synchronous serial/WAN links. Each PPP control protocol (LCP, IPCP, IPV6CP) carried in struct ppp registers a kernel timer via timer_setup(); struct ppp is the hdlc->state buffer that detach_hdlc_protocol() releases with kfree() on both unregister_hdlc_device() and the re-attach path in attach_hdlc_protocol(). Because the ppp proto never registered a .detach callback, no timer synchronization occurred before the free, and the lone timer_delete() in ppp_cp_event() neither waits for a running callback nor covers the ppp_stop()/ppp_close() paths. This is a classic CWE-416 use-after-free (the input lists CWE as N/A): a ppp_timer callback blocked on ppp->lock outlives the kfree and then reads proto->state / ppp->lock in freed kernel memory. The fix adds a .detach helper invoking timer_shutdown_sync() on every per-proto timer (shutdown rather than delete_sync because the keepalive path re-arms via add_timer()/mod_timer()), and moves timer initialization into ppp_ioctl() at attach time so teardown never operates on uninitialized timer_list structures.

RemediationAI

Vendor-released patch: upgrade to a fixed stable kernel - 5.15.211, 6.1.177, 6.6.144, 6.12.95, 6.18.38, or 7.1.3 (mainline 7.2-rc1) or later on your series - sourced from your distribution's updated kernel package or the stable trees at https://git.kernel.org/stable/c/508a0139d3bf60f6a03d2fbfb63a89a9463d983a (and the sibling commits listed above). Where immediate patching is not possible, reduce the attack surface directly: if HDLC/PPP WAN links are not used, prevent the hdlc_ppp and hdlc modules from loading (for example via a modprobe blacklist and install /bin/false override), which fully removes the vulnerable path at the cost of disabling synchronous serial PPP networking on that host. Absent that, restrict CAP_NET_ADMIN and the ability to configure HDLC network devices to trusted administrators only, since that capability is the practical prerequisite; note this does not fix the bug and only limits which local principals can reach it. Track advisories at https://nvd.nist.gov/vuln/detail/CVE-2026-63803.

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 16.0 Affected

Share

EUVD-2026-45469 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy