CVE-2026-93048

CVE-2026-93048

published September 17, 2026

CVSS
—
EPSS
0%
Percentile
10.7
In the wild
Unconfirmed
What it is

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

mtd: part: reject MTDPART_OFS_RETAIN in mtd_add_partition()

mtd_add_partition() does not reject the special offset value

MTDPART_OFS_RETAIN (-3), which leads to a WARN_ON in

add_mtd_device() when called through the BLKPG ioctl on NAND

devices. The RETAIN value depends on cur_offset being the end of

the previous partition, but in the dynamic partition path

cur_offset equals the offset argument itself, causing undefined

behavior.

Commit 5daa7b21496a ("mtd: prepare partition add and del functions

for ioctl requests") introduced mtd_add_partition() and correctly

rejected MTDPART_OFS_APPEND (-1) and MTDPART_OFS_NXTBLK (-2),

since those special offsets rely on cur_offset tracking the

previous partition's end. However, commit 1a31368bf92e ("mtd: add a flags

for partitions which should just leave smth. after them")

later added MTDPART_OFS_RETAIN (-3) for the static

partition table path without updating mtd_add_partition() to

also reject this value.

With offset=-3 passed via BLKPG, the RETAIN size calculation in

allocate_partition() underflows (parent_size - 0xFFFFFFFFFFFFFFFD

= parent_size + 3). If the underflow result does not appear to

leave enough space, allocate_partition() jumps to out_register via

goto, skipping erasesize initialization. This results in

erasesize=0, which triggers:

WARN_ON((!mtd->erasesize || !master->_erase) &&

!(mtd->flags & MTD_NO_ERASE))

in add_mtd_device(). If the underflow result appears to leave

enough space, a bogus partition size is calculated, but the

"out of reach" sanity check catches the invalid offset and

creates a disabled empty partition (offset=0, size=0) instead

of returning an error.

Fix this by adding MTDPART_OFS_RETAIN to the rejection list in

mtd_add_partition(), consistent with the existing handling of

APPEND and NXTBLK.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00211 · 10.7th percentile
Published
2026-09-17T21:17Z
References (8)
EPSS history
Timeline
  • 19 SEP 03:55Z
    EPSS moved — → 0%
    epss
  • 17 SEP 16:10Z
    mtd: part: reject MTDPART_OFS_RETAIN in mtd_add_partition()
    cvelistv5