-

CVE-2026-93048

mtd: part: reject MTDPART_OFS_RETAIN in mtd_add_partition()

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.
Daten sind bereitgestellt durch das CVE Programm von einer CVE Numbering Authority (CNA) (Unstrukturiert).
HerstellerLinux
≫
Produkt Linux
Default Statusunaffected
Version 1a31368bf92ef2a7da3ba379672c405bd2751df9
Version < 701c3ae7273e1adc20db5d97c42e0139b479f16b
Status affected
Version 1a31368bf92ef2a7da3ba379672c405bd2751df9
Version < 6aaab2ace3f7b55733d904e5549acf8405f03642
Status affected
Version 1a31368bf92ef2a7da3ba379672c405bd2751df9
Version < 181c1bff940e7d3e34ca485d37e3cdbfe409203c
Status affected
Version 1a31368bf92ef2a7da3ba379672c405bd2751df9
Version < a536eb57be58442b19398b2783071007ecfb1735
Status affected
Version 1a31368bf92ef2a7da3ba379672c405bd2751df9
Version < e204e5c49a012f99638633fdbd773e3c86260053
Status affected
Version 1a31368bf92ef2a7da3ba379672c405bd2751df9
Version < 398aca2f90122d5abbabff1079deaeb885fe9e40
Status affected
Version 1a31368bf92ef2a7da3ba379672c405bd2751df9
Version < c645f6dd1af2ecc70fd3578e141f2f71fa9e4eff
Status affected
Version 1a31368bf92ef2a7da3ba379672c405bd2751df9
Version < b759d5bb6265419344ee9729fd0dc07ad85719d8
Status affected
HerstellerLinux
≫
Produkt Linux
Default Statusaffected
Version 3.2
Status affected
Version 0
Version < 3.2
Status unaffected
Version <= 5.10.*
Version 5.10.270
Status unaffected
Version <= 5.15.*
Version 5.15.221
Status unaffected
Version <= 6.1.*
Version 6.1.188
Status unaffected
Version <= 6.6.*
Version 6.6.157
Status unaffected
Version <= 6.12.*
Version 6.12.110
Status unaffected
Version <= 6.18.*
Version 6.18.52
Status unaffected
Version <= 7.2.*
Version 7.2.6
Status unaffected
Version <= *
Version 7.3-rc1
Status unaffected
VulnDex Vulnerability Enrichment
Diese Information steht angemeldeten Benutzern zur Verfügung. Login Login
Zu dieser CVE wurde keine Warnung gefunden.
EPSS Metriken
Typ Quelle Score Percentile
EPSS FIRST.org 0.21% 0.117
CVSS Metriken
Quelle Base Score Exploit Score Impact Score Vector String
Es wurden noch keine Informationen zu CWE veröffentlicht.
https://git.kernel.org/stable/c/701c3ae7273e1adc20db5d97c42e0139b479f16b
https://git.kernel.org/stable/c/6aaab2ace3f7b55733d904e5549acf8405f03642
https://git.kernel.org/stable/c/181c1bff940e7d3e34ca485d37e3cdbfe409203c
https://git.kernel.org/stable/c/a536eb57be58442b19398b2783071007ecfb1735
https://git.kernel.org/stable/c/e204e5c49a012f99638633fdbd773e3c86260053
https://git.kernel.org/stable/c/398aca2f90122d5abbabff1079deaeb885fe9e40
https://git.kernel.org/stable/c/c645f6dd1af2ecc70fd3578e141f2f71fa9e4eff
https://git.kernel.org/stable/c/b759d5bb6265419344ee9729fd0dc07ad85719d8