В ядре Linux устранена следующая уязвимость: KVM: SEV: выделение полных страниц для операций {DE,EN}CRYPT на хостах с поддержкой SNP. При {де, шифровании} шифрования памяти гостя SEV или SEV-ES на SNP-включенном хосте через временный буфер, выделите для буфера полную страницу размером 4 КБ. убедитесь, что страница, содержащая буфер, полностью принадлежит KVM, т.е. не будет быть одновременно выделен и доступен другому коду ядра, пока KVM использование буфера для {de,en}шифрования памяти. На платформах с поддержкой SNP, когда отправка команд SEV/SEV-ES, которые запускают запись прошивки в память, Страницы, подлежащие записи, должны быть (временно) назначены микропрограмме (как требуется архитектурой SNP, чтобы защититься от использования таких команд, как гаджеты для атаки гостей SNP).
См. snp_map_cmd_buf_desc() и его друзей. К сожалению, передача права собственности на страницу в Firmware делает страницу
недоступен для программного обеспечения, и поэтому запись приводит к нарушениям RMP #PF. Если
KVM использует выделение подстраницы для своего временного буфера, какой-то другой актер
в ядре может выделять и использовать другие части страницы и, таким образом,
вызвать неожиданные (и, казалось бы, ложные) нарушения RMP #PF из-за
программное обеспечение пытается получить доступ к странице, принадлежащей встроенному программному обеспечению.
ОШИБКА: невозможно обработать ошибку страницы для адреса: ffff906ae30f0300.
#PF: доступ супервизора на запись в режиме ядра
#PF: error_code(0x80000003) — нарушение RMP
ПГД 6b1b80d067 P4D 6b1b80d067 PUD 100231e2063 PMD 10055a88063 PTE 80000100630f0163
SEV-SNP: PFN 0x100630f0 не назначен, сбрасываются ненулевые записи в регионе 2M PFN: [0x10063000 - 0x10063200]
Упс: Упс: 0003 [#1] SMP
ЦП: 70 UID: 0 PID: 10658 Связь: svw_WaiterThrea Испорчено: G U W O 7.1.0-smp--c22293789940-seanjc-next #1 PREEMPTLAZY
Испорчено: [U]=ПОЛЬЗОВАТЕЛЬ, [W]=ПРЕДУПРЕЖДЕНИЕ, [O]=OOT_MODULE
Название оборудования: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.86.0-102 25.01.2026
RIP: 0010:memset+0xf/0x20
Отслеживание вызова:
<ЗАДАЧА>
__kvmalloc_node_noprof+0x2a4/0x710
do_getxattr+0x4e/0x130
path_getxattrat+0x125/0x1b0
do_syscall_64+0x10a/0x480
запись_SYSCALL_64_after_hwframe+0x4b/0x53
РИП: 0033:0x7f3a22cb6daa
</TASK>
Связанные модули: kvm_amd kvm irqbypass vfat fat ccp k10temp sha3 libsha3 i2c_piix4 gq(O) cdc_acm xhci_pci xhci_hcd
gsmi: Причина завершения работы журнала 0x03
CR2: ffff906ae30f0300
---[ конечная трассировка 0000000000000000 ]---
RIP: 0010:memset+0xf/0x20
Паника ядра – не синхронизируется: фатальное исключение
Смещение ядра: 0x39e00000 от 0xffffffff81000000 (диапазон перемещения: 0xffffffff80000000-0xffffffffbfffffff)
gsmi: Причина завершения работы журнала 0x02
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: KVM: SEV: Allocate full pages for {DE,EN}CRYPT ops on SNP-enabled hosts When {de,en}crypting memory of an SEV or SEV-ES guest on an SNP-enabled host via a temporary buffer, allocate a full 4KiB page for the buffer to ensure the page containing the buffer is wholly owned by KVM, i.e. won't be concurrently allocated and accessed by other kernel code while KVM is using the buffer to {de,en}crypt memory. On SNP-enabled platforms, when sending SEV/SEV-ES commands that trigger firmware writes to memory, the to-be-written page(s) must be (temporarily) assigned to Firmware (as required by the SNP architecture, to guard against using such commands as gadgets to attack SNP guests). See snp_map_cmd_buf_desc() and friends. Unfortunately, transferring ownership of a page to Firmware makes the page inaccessible to software, and thus writes generate RMP #PF violations. If KVM uses a sub-page allocation for its temporary buffer, some other actor in the kernel can allocate and use the other portions of the page, and thus trigger unexpected (and seemingly spurious) RMP #PF violations due to software attempting to access a Firmware-owned page. BUG: unable to handle page fault for address: ffff906ae30f0300 #PF: supervisor write access in kernel mode #PF: error_code(0x80000003) - RMP violation PGD 6b1b80d067 P4D 6b1b80d067 PUD 100231e2063 PMD 10055a88063 PTE 80000100630f0163 SEV-SNP: PFN 0x100630f0 unassigned, dumping non-zero entries in 2M PFN region: [0x10063000 - 0x10063200] Oops: Oops: 0003 [#1] SMP CPU: 70 UID: 0 PID: 10658 Comm: svw_WaiterThrea Tainted: G U W O 7.1.0-smp--c22293789940-seanjc-next #1 PREEMPTLAZY Tainted: [U]=USER, [W]=WARN, [O]=OOT_MODULE Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.86.0-102 01/25/2026 RIP: 0010:memset+0xf/0x20 Call Trace: <TASK> __kvmalloc_node_noprof+0x2a4/0x710 do_getxattr+0x4e/0x130 path_getxattrat+0x125/0x1b0 do_syscall_64+0x10a/0x480 entry_SYSCALL_64_after_hwframe+0x4b/0x53 RIP: 0033:0x7f3a22cb6daa </TASK> Modules linked in: kvm_amd kvm irqbypass vfat fat ccp k10temp sha3 libsha3 i2c_piix4 gq(O) cdc_acm xhci_pci xhci_hcd gsmi: Log Shutdown Reason 0x03 CR2: ffff906ae30f0300 ---[ end trace 0000000000000000 ]--- RIP: 0010:memset+0xf/0x20 Kernel panic - not syncing: Fatal exception Kernel Offset: 0x39e00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff) gsmi: Log Shutdown Reason 0x02