CVE-2026-64322 in Linux
Resumen
por VulDB • 2026-07-25
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
udf: validar la longitud de la tabla de reasignación (sparing table) como un conteo de entradas, no como una cantidad en bytes.
`udf_load_sparable_map()` acepta una tabla de reasignación cuando es falsa la condición:
sizeof(*st) + le16_to_cpu(st->reallocationTableLen) > sb->s_blocksize
es decir, trata `reallocationTableLen` como un número de BYTES que deben caber en el bloque. Sin embargo, la tabla se recorre como una matriz de elementos `sparingEntry` de 8 bytes:
for (i = 0; i < le16_to_cpu(st->reallocationTableLen); i++) {
struct sparingEntry *entry = &st->mapEntry[i];
... entry->origLocation ... }
en `udf_get_pblock_spar15()` y `udf_relocate_blocks()`. Por lo tanto, un valor de `reallocationTableLen` igual a N supera la comprobación siempre que sizeof(*st) + N <= blocksize, pero los consumidores indexan sizeof(*st) + N * sizeof(struct sparingEntry) bytes -- hasta ~8 veces el tamaño del bloque. En una imagen UDF manipulada ad hoc (crafted), esto constituye una lectura fuera de límites en `udf_get_pblock_spar15()`; además, `udf_relocate_blocks()` pasa la misma longitud a `udf_update_tag()`, cuya función `crc_itu_t()` lee mucho más allá del bloque, y su llamada a `memmove()` sobre `st->mapEntry[]` constituye una escritura fuera de límites.
Validar `reallocationTableLen` como el conteo de entradas que es, utilizando `struct_size()`.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.