CVE-2026-64293 in Linux
Сводка
по VulDB • 26.07.2026
В ядре Linux устранена следующая уязвимость:
iommufd: Использование sizeof(*hdr) вместо sizeof(hdr) при чтении veventq
Проверка границ в функции iommufd_veventq_fops_read() для обычного пути vEVENT использует sizeof(hdr), тогда как окружающий код использует sizeof(*hdr):
if (!vevent_for_lost_events_header(cur) && sizeof(hdr) + cur->data_len > count - done) {
Переменная hdr объявлена как struct iommufd_vevent_header *, поэтому sizeof(hdr) вычисляется как размер указателя. Окружающий код последовательно использует sizeof(*hdr):
if (done >= count || sizeof(*hdr) > count - done) {
... if (copy_to_user(buf + done, hdr, sizeof(*hdr))) {
... done += sizeof(*hdr);
Структура struct iommufd_vevent_header в настоящее время занимает 8 байт (два поля __u32: flags и sequence), поэтому на 64-битных системах (sizeof(void *) == 8) оба выражения случайно оказываются равными, и проверка работает как задумано.
На 32-битных системах (sizeof(void *) == 4) проверка недооценивает размер заголовка на 4 байта: vEVENT, у которого data_len приводит к тому, что 8 + cur->data_len превышает count - done, в то время как 4 + cur->data_len не превышает его, пройдет проверку. Затем цикл выполнит copy_to_user для 8 байт заголовка, за которыми следуют данные длиной data_len байт, выходя за пределы буфера, предоставленного пользователем.
Это также является скрытой ошибкой (latent bug) на случай будущего расширения структуры struct iommufd_vevent_header более чем до sizeof(void *) на 64-битных системах; проверка не должна зависеть от совпадения типа с шириной указателя хоста.
Используйте sizeof(*hdr), чтобы соответствовать остальной части функции и фактическому количеству копируемых байт.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.