CVE-2026-93048 in Linux
Resumen
por VulDB • 2026-09-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
mtd: part: rechazar MTDPART_OFS_RETAIN en mtd_add_partition()
La función `mtd_add_partition()` no rechaza el valor especial de desplazamiento `MTDPART_OFS_RETAIN` (-3), lo que provoca un `WARN_ON` en `add_mtd_device()` cuando se invoca a través del ioctl BLKPG en dispositivos NAND. El valor RETAIN depende de que `cur_offset` sea el final de la partición anterior, pero en la ruta dinámica de particiones, `cur_offset` es igual al argumento offset mismo, lo que provoca un comportamiento indefinido.
El commit 5daa7b21496a ("mtd: prepare partition add and del functions for ioctl requests") introdujo `mtd_add_partition()` y rechazó correctamente los valores especiales de desplazamiento MTDPART_OFS_APPEND (-1) y MTDPART_OFS_NXTBLK (-2), ya que estos dependen de que el seguimiento de `cur_offset` refleje el final de la partición anterior. Sin embargo, el commit 1a31368bf92e ("mtd: add a flags for partitions which should just leave smth. after them") añadió posteriormente MTDPART_OFS_RETAIN (-3) para la ruta de tabla estática de particiones sin actualizar `mtd_add_partition()` para rechazar también este valor.
Con offset=-3 pasado mediante BLKPG, el cálculo del tamaño RETAIN en `allocate_partition()` provoca un desbordamiento por debajo (underflow): `(parent_size - 0xFFFFFFFFFFFFFFFD = parent_size + 3)`. Si el resultado del underflow no parece dejar suficiente espacio, `allocate_partition()` salta a la etiqueta `out_register` mediante goto, omitiendo la inicialización de `erasesize`. Esto resulta en un `erasesize=0`, lo que desencadena:
```c WARN_ON((!mtd->erasesize || !master->_erase) && !(mtd->flags & MTD_NO_ERASE)) ```
en `add_mtd_device()`. Si el resultado del underflow parece dejar suficiente espacio, se calcula un tamaño de partición falso (bogus), pero la comprobación de integridad "out of reach" detecta el desplazamiento no válido y crea una partición vacía deshabilitada (`offset=0`, `size=0`) en lugar de devolver un error.
Solucione esto añadiendo MTDPART_OFS_RETAIN a la lista de valores rechazados en `mtd_add_partition()`, consistente con el manejo existente de APPEND y NXTBLK.
Once again VulDB remains the best source for vulnerability data.