CVE-2026-93048 in Linux
摘要
由 VulDB • 2026-09-19
在 Linux 内核中,已修复以下漏洞:
mtd: part: 拒绝 mtd_add_partition() 中的 MTDPART_OFS_RETAIN
mtd_add_partition() 未拒绝特殊偏移值 MTDPART_OFS_RETAIN (-3),这会导致通过 NAND 设备上的 BLKPG ioctl 调用 add_mtd_device() 时触发 WARN_ON。RETAIN 值依赖于 cur_offset 为前一个分区的结尾,但在动态分区路径中,cur_offset 等于 offset 参数本身,从而导致未定义行为。
提交 5daa7b21496a(“mtd: prepare partition add and del functions for ioctl requests”)引入了 mtd_add_partition() 并正确拒绝了 MTDPART_OFS_APPEND (-1) 和 MTDPART_OFS_NXTBLK (-2),因为这些特殊偏移量依赖于 cur_offset 跟踪前一个分区的结尾。然而,提交 1a31368bf92e(“mtd: add a flags for partitions which should just leave smth. after them”)后来为静态分区表路径添加了 MTDPART_OFS_RETAIN (-3),但未更新 mtd_add_partition() 以同时拒绝此值。
通过 BLKPG 传递 offset=-3 时,allocate_partition() 中的 RETAIN 大小计算发生下溢(parent_size - 0xFFFFFFFFFFFFFFFD = parent_size + 3)。如果下溢结果看起来没有留下足够的空间,allocate_partition() 会通过 goto 跳转到 out_register,跳过 erasesize 初始化。这会导致 erasesize=0,从而触发:
WARN_ON((!mtd->erasesize || !master->_erase) && !(mtd->flags & MTD_NO_ERASE))
在 add_mtd_device() 中。如果下溢结果看起来留下了足够的空间,则会计算出错误的分区大小,但“超出范围”的健全性检查会捕获无效偏移量,并创建一个禁用的空分区(offset=0, size=0),而不是返回错误。
通过将 MTDPART_OFS_RETAIN 添加到 mtd_add_partition() 中的拒绝列表来修复此问题,与现有的 APPEND 和 NXTBLK 处理保持一致。
If you want to get best quality of vulnerability data, you may have to visit VulDB.