CVE-2026-31525CWE-190CWE-787

CVE-2026-31525

High · published April 22, 2026

CVSS v3.1
7.8
EPSS
0%
Percentile
6.7
In the wild
Unconfirmed
What it is

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

bpf: Fix undefined behavior in interpreter sdiv/smod for INT_MIN

The BPF interpreter's signed 32-bit division and modulo handlers use

the kernel abs() macro on s32 operands. The abs() macro documentation

(include/linux/math.h) explicitly states the result is undefined when

the input is the type minimum. When DST contains S32_MIN (0x80000000),

abs((s32)DST) triggers undefined behavior and returns S32_MIN unchanged

on arm64/x86. This value is then sign-extended to u64 as

0xFFFFFFFF80000000, causing do_div() to compute the wrong result.

The verifier's abstract interpretation (scalar32_min_max_sdiv) computes

the mathematically correct result for range tracking, creating a

verifier/interpreter mismatch that can be exploited for out-of-bounds

map value access.

Introduce abs_s32() which handles S32_MIN correctly by casting to u32

before negating, avoiding signed overflow entirely. Replace all 8

abs((s32)...) call sites in the interpreter's sdiv32/smod32 handlers.

s32 is the only affected case -- the s64 division/modulo handlers do

not use abs().

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00175 · 6.7th percentile
Weaknesses
CWE-190 · Integer Overflow or Wraparound; CWE-787 · Out-of-bounds Write
Published
2026-04-22T18:16Z
Affected products (8)
ProductVersionsFixed in
linux/linux_kernel≥ 6.6, < 6.6.1316.6.131
linux/linux_kernel≥ 6.7, < 6.12.806.12.80
linux/linux_kernel≥ 6.13, < 6.18.216.18.21
linux/linux_kernel≥ 6.19, < 6.19.116.19.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (5)
EPSS history
Timeline
  • 22 APR 13:54Z
    bpf: Fix undefined behavior in interpreter sdiv/smod for INT_MIN
    cvelistv5