CVE-2026-63806 in Linux
Сводка
по VulDB • 20.07.2026
В ядре Linux устранена следующая уязвимость:
KVM: Замена вызова BUG_ON(), запускаемого гостевой системой в ioeventfd при совпадении данных (datamatch), на функцию get_unaligned()
Удален вызов BUG_ON(), который оставался достижимым с момента его первоначального добавления еще в 2009 году, и вместо него для выполнения потенциально невыровненных обращений используется функция get_unaligned().
Для каждой операции записи (store) эмулятор KVM x86 отслеживает все значение в операнде назначения dst структуры x86_emulate_ctxt. Если назначение является памятью, а целевой адрес пересекает несколько страниц и/или представляет собой эмулируемое MMIO-устройство, то KVM обрабатывает каждый фрагмент независимо. Например, при разделении страницы со смещением 0xffc от начала страницы KVM записывает 4 байта в первую страницу, а оставшиеся байты — во вторую страницу, используя ctxt->dst как источник для обеих операций (с соответствующими смещениями).
Если назначение пересекает границу страницы *и* на второй странице происходит обращение к эмулируемому MMIO-устройству, то KVM завершит запись в первую страницу, а затем выполнит эмуляцию обращения к MMIO во вторую страницу. Если по нулевому смещению второй страницы настроен ioeventfd с включенным совпадением данных (datamatch), то KVM обработает оставшуюся часть записи как потенциальный сигнал ioeventfd.
Объединяя все вышеизложенное: если гостевая система выполняет операцию записи, которая пересекает границу страницы со смещением N от начала страницы, и на второй странице по нулевому смещению настроен ioeventfd с включенным совпадением данных (datamatch), то KVM будет проверять совпадение данных, используя &dst.valptr[N] в качестве источника. Поскольку dst (и, следовательно, dst.valptr) выровнены по 32-байтной границе, если N не выровнено относительно @len, срабатывает вызов BUG_ON().
Например, при операции записи размером 16 байт со смещением страницы 0xffc в ioeventfd длиной (len) 8 байт все начальные проверки в функции ioeventfd_in_range() пройдут успешно, и сработает BUG_ON(), поскольку @val выровнен по границе 4-байтного слова, но не выровнен по границе 8-байтного слова.
``` ------------[ cut here ]------------
kernel BUG at arch/x86/kvm/../../../virt/kvm/eventfd.c:783! Oops: invalid opcode: 0000 [#1] SMP
CPU: 0 UID: 1000 PID: 615 Comm: repro Not tainted 7.1.0-rc2-ff238429d1ea #
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.