CVE-2025-39944: octeontx2-pf: Fix use-after-free bugs in otx2_sync_tstamp()
In the Linux kernel, the following vulnerability has been resolved:
octeontx2-pf: Fix use-after-free bugs in otx2_sync_tstamp()
The original code relies on cancel_delayed_work() in otx2_ptp_destroy(),
which does not ensure that the delayed work item synctstamp_work has fully
completed if it was already running. This leads to use-after-free scenarios
where otx2_ptp is deallocated by otx2_ptp_destroy(), while synctstamp_work
remains active and attempts to dereference otx2_ptp in otx2_sync_tstamp().
Furthermore, the synctstamp_work is cyclic, the likelihood of triggering
the bug is nonnegligible.
A typical race condition is illustrated below:
CPU 0 (cleanup) | CPU 1 (delayed work callback)
otx2_remove() |
otx2_ptp_destroy() | otx2_sync_tstamp()
cancel_delayed_work() |
kfree(ptp) |
| ptp = container_of(...); //UAF
| ptp-> //UAF
This is confirmed by a KASAN report:
BUG: KASAN: slab-use-after-free in __run_timer_base.part.0+0x7d7/0x8c0
Write of size 8 at addr ffff88800aa09a18 by task bash/136
...
Call Trace:
<IRQ>
dump_stack_lvl+0x55/0x70
print_report+0xcf/0x610
? __run_timer_base.part.0+0x7d7/0x8c0
kasan_report+0xb8/0xf0
? __run_timer_base.part.0+0x7d7/0x8c0
__run_timer_base.part.0+0x7d7/0x8c0
? __pfx___run_timer_base.part.0+0x10/0x10
? __pfx_read_tsc+0x10/0x10
? ktime_get+0x60/0x140
? lapic_next_event+0x11/0x20
? clockevents_program_event+0x1d4/0x2a0
run_timer_softirq+0xd1/0x190
handle_softirqs+0x16a/0x550
irq_exit_rcu+0xaf/0xe0
sysvec_apic_timer_interrupt+0x70/0x80
</IRQ>
...
Allocated by task 1:
kasan_save_stack+0x24/0x50
kasan_save_track+0x14/0x30
__kasan_kmalloc+0x7f/0x90
otx2_ptp_init+0xb1/0x860
otx2_probe+0x4eb/0xc30
local_pci_probe+0xdc/0x190
pci_device_probe+0x2fe/0x470
really_probe+0x1ca/0x5c0
__driver_probe_device+0x248/0x310
driver_probe_device+0x44/0x120
__driver_attach+0xd2/0x310
bus_for_each_dev+0xed/0x170
bus_add_driver+0x208/0x500
driver_register+0x132/0x460
do_one_initcall+0x89/0x300
kernel_init_freeable+0x40d/0x720
kernel_init+0x1a/0x150
ret_from_fork+0x10c/0x1a0
ret_from_fork_asm+0x1a/0x30
Freed by task 136:
kasan_save_stack+0x24/0x50
kasan_save_track+0x14/0x30
kasan_save_free_info+0x3a/0x60
__kasan_slab_free+0x3f/0x50
kfree+0x137/0x370
otx2_ptp_destroy+0x38/0x80
otx2_remove+0x10d/0x4c0
pci_device_remove+0xa6/0x1d0
device_release_driver_internal+0xf8/0x210
pci_stop_bus_device+0x105/0x150
pci_stop_and_remove_bus_device_locked+0x15/0x30
remove_store+0xcc/0xe0
kernfs_fop_write_iter+0x2c3/0x440
vfs_write+0x871/0xd70
ksys_write+0xee/0x1c0
do_syscall_64+0xac/0x280
entry_SYSCALL_64_after_hwframe+0x77/0x7f
...
Replace cancel_delayed_work() with cancel_delayed_work_sync() to ensure
that the delayed work item is properly canceled before the otx2_ptp is
deallocated.
This bug was initially identified through static analysis. To reproduce
and test it, I simulated the OcteonTX2 PCI device in QEMU and introduced
artificial delays within the otx2_sync_tstamp() function to increase the
likelihood of triggering the bug.
Security readout for executives and security teams
Plain-English summary
A race in the Linux OcteonTX2 network driver can access memory after it is freed during device removal. On systems using the affected driver and PTP timestamping, this may crash the kernel or potentially allow a locally authenticated user to compromise confidentiality, integrity, and availability.
Executive priority
Prioritize remediation on exposed OcteonTX2 hosts because successful triggering can affect all three security objectives at kernel scope. Treat other Linux systems as lower priority after confirming the affected driver or hardware path is absent. No supplied evidence establishes active exploitation.
Technical view
otx2_ptp_destroy() used cancel_delayed_work(), which could return while cyclic synctstamp_work was still executing. The callback could then dereference the freed otx2_ptp object in otx2_sync_tstamp(). The documented fix uses cancel_delayed_work_sync() before deallocation. KASAN confirmed a slab use-after-free.
Likely exposure
Exposure appears limited to Linux systems using the octeontx2-pf driver and its PTP timestamping path on a listed affected kernel version. The supplied data lists 6.1, 6.1.154, 6.6.108, 6.12.49, 6.16.9, and 6.17; it also contains an ambiguous โ0โ entry.
Exploitation context
The CVSS 3.1 score is 7.8 with local access and low privileges required. The source reports static-analysis discovery and controlled QEMU reproduction, not malicious exploitation. The supplied KEV status is false, so active exploitation is not established.
Researcher notes
The vulnerable cleanup does not synchronize with an already-running delayed callback. Because the work is cyclic, the source considers triggering likelihood non-negligible. KASAN recorded a write after otx2_ptp was freed during PCI device removal. Precise distribution package boundaries are not provided and require vendor mapping.
Mitigation direction
Identify systems loading the octeontx2-pf driver and using PTP timestamping.
Apply an appropriate vendor kernel update containing the referenced synchronous-work cancellation fix.
Consult distribution or appliance vendor guidance to map the fix to supported kernel packages.
Restrict unnecessary local access until affected systems are updated.
Prioritize systems where OcteonTX2 PCI devices may be removed or drivers unloaded.
Validation and detection
Record running kernel versions and compare them with vendor advisories and fixed packages.
Confirm whether the octeontx2-pf driver and PTP functionality are present and active.
Verify the installed kernel contains the relevant upstream stable fix.
Review kernel logs for KASAN, use-after-free, timer, or octeontx2-pf fault indicators.
Test device removal and driver cleanup safely in a non-production environment after updating.
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-2025-39944 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.
1CVSS vectors
3Timeline events
0ADP providers
6Source links
CVSS vector scores
1 official score
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.