Skip to content
CVE PROGRAM SOURCE RECORDUnscored

CVE-2026-93182

sched/fair: Fix overflow in update_tg_cfs_runnable()

Description

In the Linux kernel, the following vulnerability has been resolved: sched/fair: Fix overflow in update_tg_cfs_runnable() A divide-by-zero crash is observed when running hackbench: [14697.488452] CPU: 112 UID: 0 PID: 124791 Comm: hackbench Not tainted 7.1.0-rc2+ [14697.492627] RIP: 0010:propagate_entity_load_avg+0x35f/0x3e0 [14697.506799] <TASK> [14697.507411] __dequeue_task+0x2b4/0xc70 [14697.508677] dequeue_task_fair+0x36/0x370 [14697.509047] dequeue_task+0x101/0x2f0 [14697.509426] __schedule+0x1b1/0x1a00 [14697.510868] anon_pipe_read+0x3da/0x450 [14697.511400] vfs_read+0x361/0x390 [14697.512053] __x64_sys_read+0x19/0x30 The divide-by-zero happens here: if (scale_load_down(gcfs_rq->load.weight)) { load_sum = div_u64(gcfs_rq->avg.load_sum, scale_load_down(gcfs_rq->load.weight)); } gcfs_rq->load.weight is an insane large value and is truncated to the lower 32 bits by div_u64, which happen to be 0. Using AI for investigation, the cause is a u32 overflow in update_tg_cfs_runnable(), and flat pickup became a victim when using tg_tasks(): u32 new_sum, divider; ... new_sum = se->avg.runnable_avg * divider; <-- boom The following sequence shows how this triggers the crash: propagate_entity_load_avg() update_tg_cfs_runnable() # u32 overflow corrupts runnable_sum __update_load_avg_cfs_rq() ___update_load_avg() # computes insane runnable_avg update_tg_load_avg() # propagates to tg->runnable_avg update_cfs_group() calc_concur_shares() tg_tasks() # long-to-int truncation, negative nr reweight_entity() # corrupted se->load.weight update_load_add() # corrupted cfs_rq->load.weight propagate_entity_load_avg() update_tg_cfs_load() div_u64() # divide-by-zero Fix by widening new_sum from u32 to u64 (no need to force tg_tasks() to return unsigned long after this fix)

Affected products

Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.

Linux Linux

Default version status: unaffected

  • 95246d1ec80b8d19d882cd8eb7ad094e63b41bb8 to < 39d707097a0820c6e87eff4195f0940e8ff1147eaffected
  • 95246d1ec80b8d19d882cd8eb7ad094e63b41bb8 to < 69fafae4eb2c9fc9bcff1bcbfcccf5d197434d75affected
  • 95246d1ec80b8d19d882cd8eb7ad094e63b41bb8 to < 7cc237e3bc1733928313d2462b413ae441b0eef3affected
  • 95246d1ec80b8d19d882cd8eb7ad094e63b41bb8 to < 18fdd0978ec3dda0ff6865cd273e47e022180710affected
  • 95246d1ec80b8d19d882cd8eb7ad094e63b41bb8 to < f94e62d21faad5e244d0874598a4d0ebbc0ea405affected
  • 95246d1ec80b8d19d882cd8eb7ad094e63b41bb8 to < 4f166adb5cb0525d9e32d45729fd8f28c80acbeeaffected

Linux Linux

Default version status: affected

  • 5.17affected
  • 0 to < 5.17unaffected
  • 6.1.188 to ≤ 6.1.*unaffected
  • 6.6.157 to ≤ 6.6.*unaffected
  • 6.12.110 to ≤ 6.12.*unaffected
  • 6.18.52 to ≤ 6.18.*unaffected
  • 7.2.6 to ≤ 7.2.*unaffected
  • 7.3 to ≤ *unaffected

References