Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en kernel de Linux (CVE-2024-47680)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-476 Desreferencia a puntero nulo (NULL)
Fecha de publicación:
21/10/2024
Última modificación:
24/10/2024

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: f2fs: comprobar la compatibilidad con el descarte para zonas convencionales Como muestra la función auxiliar f2fs_bdev_support_discard(), f2fs comprueba si los dispositivos de bloque de destino admiten el descarte llamando a bdev_max_discard_sectors() y bdev_is_zoned(). Esta comprobación funciona bien en la mayoría de los casos, pero no funciona para zonas convencionales en dispositivos de bloque con zonas. F2fs supone que los dispositivos de bloque con zonas admiten el descarte y llama a __submit_discard_cmd(). Cuando se llama a __submit_discard_cmd() para zonas que requieren escritura secuencial, funciona bien ya que __submit_discard_cmd() emite comandos de restablecimiento de zona en lugar de comandos de descarte. Sin embargo, cuando se llama a __submit_discard_cmd() para zonas convencionales, se llama a __blkdev_issue_discard() incluso cuando los dispositivos no admiten el descarte. La llamada inapropiada a __blkdev_issue_discard() no era un problema antes de el commit 30f1e7241422 ("bloqueo: mover las comprobaciones de descarte al controlador ioctl") porque __blkdev_issue_discard() comprobaba si los dispositivos de destino admitían o no el descarte. Si no, devolvía EOPNOTSUPP. Después de el commit, __blkdev_issue_discard() ya no lo comprueba. Siempre devuelve cero y establece NULL en el puntero bio indicado. Este puntero NULL activa f2fs_bug_on() en __submit_discard_cmd(). El ERROR se vuelve a crear con los comandos siguientes en el paso de desmontaje, donde /dev/nullb0 es un null_blk zonificado con un tamaño total de 5 GB, un tamaño de zona de 128 MB y 10 zonas convencionales. $ mkfs.f2fs -f -m /dev/nullb0 $ mount /dev/nullb0 /mnt $ for ((i=0;i<5;i++)); do dd if=/dev/zero of=/mnt/test bs=65536 count=1600 conv=fsync; done $ umount /mnt Para corregir el ERROR, evite la llamada __blkdev_issue_discard() inapropiada. Cuando se solicita el descarte para zonas convencionales, verifique si el dispositivo admite el descarte o no. Si no es así, devuelva EOPNOTSUPP.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.10 (incluyendo) 6.10.13 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.11 (incluyendo) 6.11.2 (excluyendo)