Skip to main content
VulnerabilityPublished Updated

CVE-2026-98260: Linux kernel · exec: Cleanup POSIX timers right after de_thread()

Source GCVE Database

0
Compare
Authoritative record:CVE-2026-98260· High 7.8

Not known to be exploited · CVSS 7.8 High · fixed in f6c93e8ecaaf12959b7ef6eb611351001db2ff5d : patch Linux kernel soon.

Data as of 30 Oct 2026, 16:33 UTC

CVSS 3.1 base score
7.8High
How severe the flaw is on the 0–10 CVSS scale.

Thin evidence

One scorer or none
CVSS scores by source
CNA (Linux)CVSS 3.17.8
Patch
Available – fixed in f6c93e8ecaaf12959b7ef6eb611351001db2ff5d, d602877baf36c43c788a5f472c977e0be414029f, d9ae467e617ca29b825493a362bf0d75ad5f4ac3 +3
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 6 Oct 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponized: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 30 Oct 2026.

What to do

Upgrade to a fixed release listed under Affected software.

Affected software

ProductAffectedFixed in
LinuxLinuxAffected
  • ≥ 55e8c8eb2c7b6bf30e99423ccfe7ca032f498f59, < f6c93e8ecaaf12959b7ef6eb611351001db2ff5d
Fixed in
  • f6c93e8ecaaf12959b7ef6eb611351001db2ff5d
LinuxLinuxAffected
  • ≥ 55e8c8eb2c7b6bf30e99423ccfe7ca032f498f59, < d602877baf36c43c788a5f472c977e0be414029f
Fixed in
  • d602877baf36c43c788a5f472c977e0be414029f
LinuxLinuxAffected
  • ≥ 55e8c8eb2c7b6bf30e99423ccfe7ca032f498f59, < d9ae467e617ca29b825493a362bf0d75ad5f4ac3
Fixed in
  • d9ae467e617ca29b825493a362bf0d75ad5f4ac3
LinuxLinuxAffected
  • ≥ 55e8c8eb2c7b6bf30e99423ccfe7ca032f498f59, < acb03d3881818581052924a9bbbe92b8741ed448
Fixed in
  • acb03d3881818581052924a9bbbe92b8741ed448
LinuxLinuxAffected
  • ≥ 55e8c8eb2c7b6bf30e99423ccfe7ca032f498f59, < 75aa08b93c65766040f9ca99f41ac85ad22596b6
Fixed in
  • 75aa08b93c65766040f9ca99f41ac85ad22596b6
LinuxLinuxAffected
  • ≥ 55e8c8eb2c7b6bf30e99423ccfe7ca032f498f59, < 6f1977cea3e85cd8ab55fb337d3e1725fe61d1ce
Fixed in
  • 6f1977cea3e85cd8ab55fb337d3e1725fe61d1ce

Description

In the Linux kernel, the following vulnerability has been resolved: exec: Cleanup POSIX timers right after de_thread() A per-thread CPU timer holds a reference to the PID of the thread it is attached to and, while it is armed, its node is queued in that thread's posix_cputimers. The task is looked up by that PID. When a non-leader thread exec()s, de_thread() changes which task owns that PID. pid_task(timer->it.cpu.pid, PIDTYPE_PID) then returns NULL, but the node is still queued on tsk, which is alive. timer_lock_sighand() takes a failed lookup to mean that the node is already dequeued, so it has nothing to undo. begin_new_exec() calls posix_cpu_timers_exit(me) right after exec_task_namespaces() and that removes the leftover node, so the state normally stays invisible. But bprm->point_of_no_return is set before de_thread(), so if unshare_files(), set_mm_exe_file(), exec_mmap() or exec_task_namespaces() fails, the task dies before it gets there. exit_itimers() then frees the k_itimer while its node is still queued, and reaping tsk later erases that freed node from the rbtree. In short: the non-leader thread B the parent timer_create(CLOCK_THREAD_CPUTIME_ID) timer_settime() arm_timer() // the node is queued on B execve() de_thread(B) exchange_tids(B, leader) // B's PID now belongs to the leader release_task(leader) __exit_signal(leader) posix_cpu_timers_exit(leader) // cleans leader's queue, not B's __unhash_process(leader) // that PID has no task anymore exec_mmap() mmap_read_lock_killable(old_mm) kill(B, SIGKILL) // -EINTR get_signal() do_exit() exit_itimers() posix_timer_delete() posix_cpu_timer_del() posix_timer_unhash_and_free() // freed while still queued wait4() release_task(B) posix_cpu_timers_exit(B) cleanup_timerqueue() timerqueue_del() // use-after-free Move the POSIX timer cleanup right after de_thread() before any of the later failure conditions brings the task into do_exit(). [ tglx: Move the cleanup right after de_thread() ]

References

Community reviews

Loading reviews…