Vulnerabilidad en kernel de Linux (CVE-2024-53044)
Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
19/11/2024
Última modificación:
27/11/2024
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: net/sched: sch_api: corregir la ruta del error xa_insert() en tcf_block_get_ext() Este comando: $ tc qdisc replace dev eth0 ingress_block 1 egress_block 1 clsact Error: la inserción dev del bloque falló: -EBUSY. falla porque el espacio de usuario solicita que se configure el mismo índice de bloque tanto para el ingreso como para el egreso. [nota al margen, no creo que haya fallado antes del commit 913b47d3424e ("net/sched: Introduce tc block netdev tracking infra"), porque este es un comando de un antiguo conjunto de notas mías que solían funcionar, pero por desgracia, no lo dividí científicamente] El problema no es que falle, sino que la segunda vez, falla de forma diferente (e irrecuperable): $ tc qdisc replace dev eth0 ingress_block 1 egress_block 1 clsact Error: dsa_core: Flow block cb is busy. [otra nota: el extack lo agregué yo con fines ilustrativos. El contexto del problema es que clsact_init() obtiene el mismo puntero &q->ingress_block que &q->egress_block, y dado que llamamos a tcf_block_get_ext() en ambos, "dev" se agregará al xarray block->ports dos veces, lo que hará que la operación falle: una vez a través del puntero del bloque de ingreso y otra vez a través del puntero del bloque de egreso. El problema en sí es que cuando xa_insert() falla, hemos emitido un comando FLOW_BLOCK_BIND a través de ndo_setup_tc(), pero la descarga nunca ve un FLOW_BLOCK_UNBIND correspondiente. Incluso corrigiendo la entrada incorrecta del usuario, aún no podemos recuperarnos: $ tc qdisc replace dev swp3 ingress_block 1 egress_block 2 clsact Error: dsa_core: el bloque de flujo cb está ocupado. Básicamente, la única forma de recuperarse es reiniciar el sistema o desvincular y volver a vincular el controlador del dispositivo de red. Para corregir el error, debemos completar la ruta de desmontaje de error correcta que se omitió durante el movimiento del código y llamar a tcf_block_offload_unbind() cuando falla xa_insert(). [Última nota: fundamentalmente culpo a la convención de nombres de etiquetas en tcf_block_get_ext() por el error. Las etiquetas deben tener el nombre de lo que hacen, no de la ruta de error que las lleva a ellas. De esta manera, es obviamente incorrecto que dos etiquetas que apuntan al mismo código signifiquen que algo está mal, y verificar la corrección del código en el sitio de destino también es más fácil]
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.8 (incluyendo) | 6.11.7 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:6.12:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc4:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc5:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página