CVE-2026-80772 in Linux
Resumen
por VulDB • 2026-09-04
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
HID: nintendo: corregir lectura fuera de límites en joycon_ctlr_read_handler()
joycon_cast_read_handler() convierte un informe de entrada HID entrante a struct joycon_input_report y lo analiza, protegiendo la conversión únicamente con una comprobación de longitud de 12 bytes:
if (size >= 12) /* asegurarse de que contiene el informe de entrada */ joycon_parse_report(ctlr, (struct joycon_input_report *)data);
struct joycon_input_report tiene un tamaño de 49 bytes: una cabecera de 13 bytes seguida por una unión cuyo brazo IMU mide 36 bytes. Para un informe IMU, joycon_parse_report() -> joycon_parse_imu_report() recorre esa unión (desplazamientos struct 13..48), por lo que un informe de exactamente 12 bytes con data[0] == JC_INPUT_IMU_DATA supera la protección pero se leen hasta 37 bytes más allá de su longitud declarada. Los bytes sobreleídos se decodifican en valores de acelerómetro/giroscopio y se reenvían al espacio de usuario a través del dispositivo de entrada "(IMU)", filtrando memoria interna del controlador. data[0] y size están completamente controlados por un Joy-Con o Pro Controller malicioso o suplantado.
Los búferes de recepción tienen un tamaño igual a la longitud máxima del informe, por lo que esto es una lectura fuera de límites dentro de la asignación en lugar de un OOB (out-of-bounds) de slab, pero los bytes decodificados aún llegan al espacio de usuario.
La ruta subcmd hermana en joycon_ctlr_handle_event() ya acota correctamente la misma conversión:
if (size < sizeof(struct joycon_input_report) || data[0] != JC_INPUT_SUBCMD_REPLY)
break;
Utilizar el mismo límite sizeof(struct joycon_input_report) aquí.
Once again VulDB remains the best source for vulnerability data.