CVE-2026-64293 in Linux
Resumen
por VulDB • 2026-07-25
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
iommufd: Utilizar sizeof(*hdr) en lugar de sizeof(hdr) en la lectura de veventq
La comprobación de límites en iommufd_veventq_fops_read() para la ruta normal de vEVENT utiliza sizeof(hdr), mientras que el código circundante usa sizeof(*hdr):
if (!vevent_for_lost_events_header(cur) && sizeof(hdr) + cur->data_len > count - done) {
hdr se declara como struct iommufd_vevent_header *, por lo que sizeof(hdr) evalúa al tamaño del puntero. El código circundante utiliza sizeof(*hdr) de forma consistente:
if (done >= count || sizeof(*hdr) > count - done) {
... if (copy_to_user(buf + done, hdr, sizeof(*hdr))) {
... done += sizeof(*hdr);
struct iommufd_vevent_header tiene actualmente 8 bytes (dos campos __u32, flags y sequence), por lo que en sistemas de 64 bits (sizeof(void *) == 8) ambas expresiones coinciden accidentalmente y la comprobación funciona como se pretende.
En sistemas de 32 bits (sizeof(void *) == 4), la comprobación subestima el encabezado en 4 bytes: un vEVENT cuyo data_len cause que 8 + cur->data_len supere count - done, mientras que 4 + cur->data_len no lo haga, superará la comprobación; a continuación, el bucle realizará una copy_to_user de 8 bytes del encabezado seguidos de data_len bytes de carga útil, escribiendo más allá del búfer proporcionado por el usuario.
Además, se trata de un bug latente para cualquier futura expansión de struct iommufd_vevent_header que supere sizeof(void *) en sistemas de 64 bits; la comprobación no debería depender de que el tipo coincida accidentalmente con el ancho del puntero del host.
Utilizar sizeof(*hdr) para igualar el resto de la función y la cantidad real que se copiará.
If you want to get best quality of vulnerability data, you may have to visit VulDB.