CVE-2025-38001

Published Jun 6, 2025

Last updated 4 days ago

CVSS high 7.8
Linux Kernel

Overview

AI description

Automated description summarized from trusted sources.

CVE-2025-38001 is a vulnerability in the Linux kernel affecting the Hierarchical Fair Service Curve (HFSC) scheduler component. Disclosed on June 6, 2025, it involves a use-after-free (UAF) condition when HFSC is used with NETEM. The vulnerability stems from a bypass in a previous patch that attempted to address re-entrant enqueue issues. The flaw occurs because the patch only checks the `cl->cl_nactive` field to determine first insertion, but this field is only incremented by `init_vf`. By using `HFSC_RSC` (which uses `inited`), it's possible to bypass the check and insert the class twice in the eltree. This can lead to an infinite loop in `hfsc_dequeue` under normal conditions, but when combined with TBF as root qdisc configured with a very low rate, it can prevent packets from being dequeued, enabling subsequent insertions in the HFSC eltree and causing a UAF condition.

Description
In the Linux kernel, the following vulnerability has been resolved: net_sched: hfsc: Address reentrant enqueue adding class to eltree twice Savino says: "We are writing to report that this recent patch (141d34391abbb315d68556b7c67ad97885407547) [1] can be bypassed, and a UAF can still occur when HFSC is utilized with NETEM. The patch only checks the cl->cl_nactive field to determine whether it is the first insertion or not [2], but this field is only incremented by init_vf [3]. By using HFSC_RSC (which uses init_ed) [4], it is possible to bypass the check and insert the class twice in the eltree. Under normal conditions, this would lead to an infinite loop in hfsc_dequeue for the reasons we already explained in this report [5]. However, if TBF is added as root qdisc and it is configured with a very low rate, it can be utilized to prevent packets from being dequeued. This behavior can be exploited to perform subsequent insertions in the HFSC eltree and cause a UAF." To fix both the UAF and the infinite loop, with netem as an hfsc child, check explicitly in hfsc_enqueue whether the class is already in the eltree whenever the HFSC_RSC flag is set. [1] https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=141d34391abbb315d68556b7c67ad97885407547 [2] https://elixir.bootlin.com/linux/v6.15-rc5/source/net/sched/sch_hfsc.c#L1572 [3] https://elixir.bootlin.com/linux/v6.15-rc5/source/net/sched/sch_hfsc.c#L677 [4] https://elixir.bootlin.com/linux/v6.15-rc5/source/net/sched/sch_hfsc.c#L1574 [5] https://lore.kernel.org/netdev/8DuRWwfqjoRDLDmBMlIfbrsZg9Gx50DHJc1ilxsEBNe2D6NMoigR_eIRIG0LOjMc3r10nUUZtArXx4oZBIdUfZQrwjcQhdinnMis_0G7VEk=@willsroot.io/T/#u
Source
416baaa9-dc9f-4396-8d5f-8c081fb06d67
NVD status
Modified
Products
linux_kernel, debian_linux

Risk scores

CVSS 3.1

Type
Primary
Base score
5.5
Impact score
3.6
Exploitability score
1.8
Vector string
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Severity
MEDIUM

Weaknesses

nvd@nist.gov
CWE-835

Social media

Hype score
Not currently trending
  1. #exploit #Kernel_Security "Exploiting a Linux Kernel 0-day Through Red-Black Tree Transformations", HexaCon 2025. ]-> Linux HFSC Eltree UAF - Debian 12 PoC - https://t.co/7IGmAbxrla // CVE-2025-38001 Analysis + RbTree Attack Against LTS/COS + Mitigations Exploit See also: ]-

    @ksg93rd

    24 Dec 2025

    4428 Impressions

    18 Retweets

    142 Likes

    54 Bookmarks

    2 Replies

    0 Quotes

  2. An RbTree Family Drama Talk by William Liu and Savino Dicanosa @cor_ctf about exploiting CVE-2025-38001 — a use-after-free in the network packet scheduler. Slides: https://t.co/9uzwjmQilt Video: https://t.co/umCg8CshIO

    @linkersec

    10 Dec 2025

    10551 Impressions

    16 Retweets

    54 Likes

    37 Bookmarks

    1 Reply

    0 Quotes

  3. Analysis and exploitation of a Use-After-Free vulnerability in the Linux network packet schedule (CVE-2025-38001) https://t.co/t0C6wWlyWI #infosec #Linux https://t.co/wsIxrGgwWo

    @0xor0ne

    2 Dec 2025

    8010 Impressions

    44 Retweets

    199 Likes

    106 Bookmarks

    1 Reply

    0 Quotes

  4. Top 5 Trending CVEs: 1 - CVE-2023-41990 2 - CVE-2017-0144 3 - CVE-2025-49144 4 - CVE-2023-38606 5 - CVE-2025-38001 #cve #cvetrends #cveshield #cybersecurity https://t.co/4Fua3CAN6W

    @CVEShield

    20 Oct 2025

    16 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  5. 🚨CVE-2025-38001: Linux HFSC Eltree Use-After-Free - Debian 12 PoC GitHub: https://t.co/1YTrZ15fRs Bounty: $82,000 Write-up: https://t.co/vFmqiueOZX https://t.co/QFSMgOjCpw

    @DarkWebInformer

    19 Oct 2025

    11334 Impressions

    23 Retweets

    106 Likes

    50 Bookmarks

    1 Reply

    0 Quotes

  6. Exploiting a Use-After-Free vulnerability in the Linux network packet schedule (CVE-2025-38001) https://t.co/t0C6wWlyWI Credits @cor_ctf #infosec #Linux https://t.co/ncVYtZAVwV

    @0xor0ne

    12 Oct 2025

    18770 Impressions

    42 Retweets

    225 Likes

    81 Bookmarks

    1 Reply

    1 Quote

  7. 🚨 CRITICAL: #SUSE releases kernel security patch SUSE-SU-2025:03222-1. Fixes 4 CVEs, including CVE-2025-38001 & CVE-2025-38212 (CVSS 8.5). Impacts SLE 15 SP6/SP7 & openSUSE Leap 15.6. Read more:👉 https://t.co/NozG7Yo3tN #Security https://t.co/Fkp5gTQbFk

    @Cezar_H_Linux

    16 Sept 2025

    5 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  8. URGENT: Patch SUSE Linux 15 SP5 now! Live Patch 20 fixes 10 kernel vulnerabilities, including CVE-2025-38001 (CVSS 8.5). Prevent privilege escalation and system crashes. Affected: #SUSE, #openSUSE Leap 15.5, #SAP servers. Read more: 👉 https://t.co/SmocRZdOFK https://t.co/5uS

    @Cezar_H_Linux

    15 Sept 2025

    60 Impressions

    0 Retweets

    1 Like

    0 Bookmarks

    0 Replies

    0 Quotes

  9. 🚨 CRITICAL ALERT for @SUSELinux & @openSUSE users! Live Patch 17 for SLE 15 SP5/Leap 15.5 patches 9 vulnerabilities, including 2x CVSS 8.5 flaws (CVE-2025-38212, CVE-2025-38001). Read more:👉 https://t.co/YcyQobEZDQ #LinuxSecurity #CyberSecurity #SUSE https://t.co/khI04

    @Cezar_H_Linux

    14 Sept 2025

    41 Impressions

    0 Retweets

    1 Like

    0 Bookmarks

    0 Replies

    0 Quotes

  10. URGENT: Patch #SUSE Linux NOW. Live Patch 17 for SLE 15 SP5 fixes 9 critical kernel vulnerabilities (CVE-2025-38212, CVE-2025-38001, etc.). Risk: Local Privilege Escalation & DoS. Read more:👉 https://t.co/qZMhtWMRT4 https://t.co/f532a39oB0

    @Cezar_H_Linux

    14 Sept 2025

    83 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  11. Urgent: #SUSE releases Live Patch 41 for Linux Kernel (SLE 15 SP4/Leap 15.4). Patches 4 vulnerabilities: CVE-2025-37890, CVE-2025-38000, CVE-2025-38001 (CVSS 8.5), CVE-2025-38212 (CVSS 8.5). Read more: 👉 https://t.co/L6VAeHng7B #Security https://t.co/FyoVgvjs8m

    @Cezar_H_Linux

    13 Sept 2025

    113 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  12. URGENT: #SUSE releases critical Linux kernel security patch for SLE 15 SP4 and #openSUSE Leap 15.4. Fixes 6 vulnerabilities, including: ✅ CVE-2025-38212 (CVSS 8.5) - IPC UAF ✅ CVE-2025-38001 (CVSS 8.5) - HFSC flaw Read more:👉 https://t.co/uqFzf8yqz1 https://t.co/

    @Cezar_H_Linux

    13 Sept 2025

    114 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  13. 🚨 Critical patch for #SUSE SLE 15 SP4 & #openSUSE Leap 15.4! Live Patch 31 fixes 9 kernel vulnerabilities, including high-severity CVEs: CVE-2025-38212 (CVSS 8.5). CVE-2025-38001 (CVSS 8.5) . Read more:👉 https://t.co/59ducSDAqD #Security https://t.co/NH2uNmjEHK

    @Cezar_H_Linux

    11 Sept 2025

    1 Impression

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  14. URGENT: #SUSE patches 6 critical Linux Kernel vulnerabilities (SUSE-SU-2025:03109-1). CVSS Scores up to 8.5! Impacts: CVE-2025-38212 (IPC), CVE-2025-38001 (HFSC), and more. Read more: 👉 https://t.co/BnY4fxSrYJ #Security https://t.co/i2uifmu70P

    @Cezar_H_Linux

    10 Sept 2025

    64 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  15. URGENT: #SUSE patches 5 critical CVEs in Linux Kernel RT for SLE 15 SP7. CVE-2025-38212 (CVSS 8.5): IPC flaw CVE-2025-38001 (CVSS 8.5): HFSC flaw Read more: 👉 https://t.co/X16DdiVkST https://t.co/NIxAz9kbmc

    @Cezar_H_Linux

    10 Sept 2025

    60 Impressions

    0 Retweets

    1 Like

    0 Bookmarks

    0 Replies

    0 Quotes

  16. ''[CVE-2025-38001] Exploiting All Google kernelCTF Instances And Debian 12 With A 0-Day For $82k: A RBTree Family Drama (Part One: LTS & COS)'' #infosec #pentest #redteam #blueteam https://t.co/WRrelBgglY

    @CyberWarship

    20 Aug 2025

    2769 Impressions

    14 Retweets

    33 Likes

    5 Bookmarks

    1 Reply

    0 Quotes

  17. Linux の脆弱性 CVE-2025-38001 が FIX:Google kernelCTF と Debian 12 に深刻な影響 https://t.co/iZ6DJtVyEl この脆弱性は、Linux カーネルのネットワーク制御機能 HFSC におけるキュー管理処理に関するものです。NETEM のパケット

    @iototsecnews

    18 Aug 2025

    132 Impressions

    1 Retweet

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  18. Researchers exploit CVE-2025-38001 to compromise Google kernelCTF instances and Debian 12 systems, earning $82K in bounties. Highlights need for thorough code audits. Link: https://t.co/q9wXqOIXWU #Security #Linux #Exploit #Kernel #Hacking #Bounty #CVE #Audit #Research #Tech

    @dailytechonx

    4 Aug 2025

    4 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  19. URGENT: #Ubuntu 20.04 LTS kernel patch USN-7671-3 fixes: 11 CVEs (7 CRITICAL). Netfilter RCE (CVE-2025-38001). GPU driver exploits Update NOW + recompile modules. Read more: 👉 https://t.co/MMyaWIzXcq https://t.co/ifdLD8q9DF

    @Cezar_H_Linux

    4 Aug 2025

    34 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  20. LinuxネットワークパケットスケジューラのHFSCキュー規律における深刻なUse-After-Free脆弱性(CVE-2025-38001)

    @pocochi20250519

    4 Aug 2025

    40 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  21. Exploiting a Use-After-Free vulnerability in the Linux network packet schedule (CVE-2025-38001) (@cor_ctf) https://t.co/t0C6wWlyWI #infosec #Linux https://t.co/r8cBRApYaX

    @0xor0ne

    4 Aug 2025

    7702 Impressions

    53 Retweets

    223 Likes

    89 Bookmarks

    2 Replies

    1 Quote

  22. [CVE-2025-38001] Exploiting All Google kernelCTF Instances And Debian 12 With A 0-Day For $82k: A RBTree Family Drama (Part One: LTS & COS) https://t.co/DdKtTXZhuI

    @hashimzulkifli

    4 Aug 2025

    12 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  23. [CVE-2025-38001] Exploiting All Google kernelCTF Instances And Debian 12 With A 0-Day For $82k: A RBTree Family Drama (Part One: LTS & COS) https://t.co/lQyWIZh8W4

    @Dinosn

    3 Aug 2025

    2130 Impressions

    2 Retweets

    13 Likes

    9 Bookmarks

    0 Replies

    0 Quotes

  24. 2025-07-12 の人気記事はコチラでした。(自動ツイート) #Hacker_Trends ――― [CVE-2025-38001] Exploiting All Google kernelCTF Instances And Debian 12 With A 0-Day For $82k: A RBTree Family Drama (Part One: LTS & COS) https://t.co/o18JieEEim https://t.co/uKR

    @motikan2010

    13 Jul 2025

    98 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  25. Últimas noticias sobre #Hacking: En las últimas 24 horas, se han descubierto vulnerabilidades críticas en diversas plataformas como CVE-2025-38001 en Google y Debian 12, y CitrixBleed 2, además de un ataque a Gravity Forms de WordPress. Los parches... 👉 https://t.co/V4Uug

    @JaimeARestrepo_

    12 Jul 2025

    9 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  26. URGENT: #Ubuntu 24.10/24.04 LTS kernel flaws (CVE-2025-38001, etc.) allow privilege escalation & network attacks. Patch via: sudo apt update && sudo apt upgrade. Read more: 👉https://t.co/alQePDB537 #LinuxSecurity https://t.co/TVamfHN1ZX

    @Cezar_H_Linux

    9 Jul 2025

    32 Impressions

    0 Retweets

    1 Like

    0 Bookmarks

    0 Replies

    0 Quotes

  27. 🚨 Breaking: #Linux kernel real-time (RT) systems are vulnerable to CVE-2025-38001 (Netfilter bypass) and CVE-2025-37997 (InfiniBand leaks). Patch via sudo apt upgrade + reboot. Details: 👉 https://t.co/W9iKrcUVIs #InfoSec https://t.co/X22mGbU04m

    @Cezar_H_Linux

    2 Jul 2025

    33 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  28. Critical Linux Kernel (Real-time) Patch Alert! 🚀 CVE-2025-38001 & other flaws fixed in GPU, SMB, Netfilter. Read more: 👉 https://t.co/7VHqFLkBPu #Linux #Infosec #Ubuntu https://t.co/vC0C8n5Zpf

    @Cezar_H_Linux

    2 Jul 2025

    12 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  29. CVE-2025-38001 In the Linux kernel, the following vulnerability has been resolved: net_sched: hfsc: Address reentrant enqueue adding class to eltree twice Savino says: "We are… https://t.co/7PzcmtFfNJ

    @CVEnew

    6 Jun 2025

    181 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

Configurations

  1. In the Linux kernel, the following vulnerability has been resolved: KVM: x86/mmu: Ensure hugepage is in by slot before checking max mapping level When recovering hugepages in the shadow MMU, verify that the base gfn of the shadow page is actually contained within the target memslot, *before* querying the max mapping level given the shadow page's gfn. Failure to pre-check the validity of the gfn can lead to an out-of-bounds access to the slot's lpage_info (which typically manifests as a host #PF because the lpage_info is vmalloc'd) if the guest creates a hugepage mapping (in its PTEs) that extends "below" the bounds of a memslot. When faulting in memory for a guest, and the size of the guest mapping is greater than KVM's (current) max mapping, then KVM will create a "direct" shadow page (direct in that there are no gPTEs to shadow, and so the target gfn is a direct calculation given the base gfn of the shadow page). The hugepage recovery flow looks for such direct shadow pages, as forcing 4KiB mappings when dirty logging generates the guest > host mapping size case. When the 4KiB restriction is lifted, then KVM can replace the shadow page with a hugepage. But if KVM originally used a smaller mapping than the guest because the range of memory covered by the guest hugepage exceeds the bounds of a memslot, then KVM will link a direct shadow page with a gfn that is outside the bounds of the memslot being used to fault in memory. The rmap entry added for the leaf mapping is correct and within bounds, but the gfn of the leaf SPTE's parent shadow page will be out of bounds. BUG: unable to handle page fault for address: ffffc90000806ffc #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 100000067 P4D 100000067 PUD 1002a7067 PMD 10612f067 PTE 0 Oops: Oops: 0000 [#1] SMP CPU: 13 UID: 1000 PID: 757 Comm: mmu_stress_test Not tainted 7.1.0-rc1-48ce1e26eace-x86_pir_to_irr_comments-vm #341 PREEMPT Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:kvm_mmu_max_mapping_level+0x79/0x2b0 [kvm] Call Trace: <TASK> kvm_mmu_recover_huge_pages+0x21b/0x320 [kvm] kvm_set_memslot+0x1ee/0x590 [kvm] kvm_set_memory_region.part.0+0x3a1/0x4d0 [kvm] kvm_vm_ioctl+0x9bf/0x15d0 [kvm] __x64_sys_ioctl+0x8a/0xd0 do_syscall_64+0xb7/0xbb0 entry_SYSCALL_64_after_hwframe+0x4b/0x53 RIP: 0033:0x7f21c0f1a9bf </TASK> Don't bother pre-checking the bounds of the potential hugepage, i.e. don't check that e.g. sp->gfn + KVM_PAGES_PER_HPAGE(sp->role.level + 1) is also within the memslot, as the checks performed by kvm_mmu_max_mapping_level() are a superset of the basic bounds checks. I.e. pre-checking the full range would be a dubious micro-optimization.CVE-2026-63807
  2. In the Linux kernel, the following vulnerability has been resolved: KVM: Replace guest-triggerable BUG_ON() in ioeventfd datamatch with get_unaligned() Drop a BUG_ON() that has been reachable since it was first added, way back in 2009, and instead use get_unaligned() to perform potentially-unaligned accesses. For a given store, KVM x86's emulator tracks the entire value in the destination operand, x86_emulate_ctxt.dst. If the destination is memory, and the target splits multiple pages and/or is emulated MMIO, then KVM handles each fragment independently. E.g. on a page split starting at page offset 0xffc, KVM writes 4 bytes to the first page, then the remaining bytes to the second page, using ctxt->dst as the source for both (with appropriate offsets). If the destination splits a page *and* hits emulated MMIO on the second page, then KVM will complete the write to the first page, then emulate the MMIO access to the second page. If there is a datamatch-enabled ioeventfd at offset 0 of the second page, then KVM will process the remainder of the store as a potential ioeventfd signal. Putting it all together, if the guest emits a store that splits a page starting at page offset N, and the second page has a datamatch-enabled ioeventfd at offset 0, then KVM will check for datamatch using &dst.valptr[N] as the source. Due to dst (and thus dst.valptr) being 32-byte aligned, if N is not aligned to @len, the BUG_ON() fires. E.g. with a 16-byte store at page offset 0xffc, to an ioeventfd of len 8, all initial checks in ioeventfd_in_range() will succeed, and the BUG_ON() fires due to @val being 4-byte aligned, but not 8-byte aligned. ------------[ cut here ]------------ kernel BUG at arch/x86/kvm/../../../virt/kvm/eventfd.c:783! Oops: invalid opcode: 0000 [#1] SMP CPU: 0 UID: 1000 PID: 615 Comm: repro Not tainted 7.1.0-rc2-ff238429d1ea #365 PREEMPT Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:ioeventfd_write+0x6c/0x70 [kvm] Call Trace: <TASK> __kvm_io_bus_write+0x85/0xb0 [kvm] kvm_io_bus_write+0x53/0x80 [kvm] vcpu_mmio_write+0x66/0xf0 [kvm] emulator_read_write_onepage+0x12a/0x540 [kvm] emulator_read_write+0x109/0x2b0 [kvm] x86_emulate_insn+0x4f8/0xfb0 [kvm] x86_emulate_instruction+0x181/0x790 [kvm] kvm_mmu_page_fault+0x313/0x630 [kvm] vmx_handle_exit+0x18a/0x590 [kvm_intel] kvm_arch_vcpu_ioctl_run+0xc81/0x1c90 [kvm] kvm_vcpu_ioctl+0x2d5/0x970 [kvm] __x64_sys_ioctl+0x8a/0xd0 do_syscall_64+0xb7/0x890 entry_SYSCALL_64_after_hwframe+0x4b/0x53 RIP: 0033:0x7f19c931a9bf </TASK> Modules linked in: kvm_intel kvm irqbypass ---[ end trace 0000000000000000 ]--- In a perfect world, the fix would be to simply delete the BUG_ON(), as KVM x86 doesn't perform alignment checks on "normal" memory accesses at CPL0. Sadly, C99 ruins all the fun; while the x86 architecture plays nice, dereferencing an unaligned pointer directly is undefined behavior in C, e.g. triggers splats when running with CONFIG_UBSAN_ALIGNMENT=y.CVE-2026-63806
  3. 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.CVE-2026-63803