Scalono w niedzielę przed oznaczeniem Linux 6.2-rc6 to późna „poprawka” kodu AMD Secure Encrypted Virtualization Secure Nested Paging (SEV-SNP), aby uniknąć możliwych sytuacji niezdefiniowanego zachowania z trudnymi do debugowania problemami, w których nowoczesny host Linux z SEV-SNP może próbować uruchomić maszynę wirtualną Linux z przestarzałym jądrem.

Niektóre funkcje AMD SEV-SNP wymagają obsługi po stronie gościa, aby działały poprawnie, więc jeśli nowoczesny host Linux z najnowszym jądrem obsługującym nowsze funkcje nowoczesnych procesorów AMD EPYC spróbuje uruchomić maszynę wirtualną gościa z jądrem nieobsługującym niektórych SEV, mogą wystąpić problemy — problemy, które niekoniecznie są łatwe do zdiagnozowania. Co zaskakujące, dopiero wczoraj główne jądro Linuksa otrzymało wsparcie negocjacji funkcji gościa SEV-SNP, aby poradzić sobie z tą realną możliwością posiadania przez hosta/hiperwizora jądra nowszego niż to, które znajduje się na maszynach wirtualnych gościa.

Z łatki dodającej obsługę negocjacji funkcji gościa SEV-SNP:

“Hipervisor może włączyć różne nowe funkcje (SEV_FEATURES[1:63]) i uruchomić SNP gość. Niektóre z tych funkcji wymagają implementacji po stronie gościa. Jeśli którakolwiek z tych funkcji zostanie włączona bez implementacji po stronie gościa, zachowanie gościa SNP będzie niezdefiniowane. Uruchomienie gościa SNP może zakończyć się niepowodzeniem w nieoczywisty sposób, co utrudni debugowanie.

Zamiast pozwalać gościowi na kontynuację i losową awarię później, wykryj to wcześnie i pomyślnie.

SEV_STATUS MSR wskazuje funkcje, które hipernadzorca włączył. Podczas uruchamiania goście SNP powinni upewnić się, że wszystkie włączone funkcje mają implementację po stronie gościa. W przypadku, gdy jakakolwiek funkcja nie jest zaimplementowana w gościu, gość kończy uruchamianie za pomocą zdarzenia żądania zakończenia Non-Automatic Exit (NAE) protokołu GHCB. Wypełnij SW_EX ITINFO2 z maską nieobsługiwanych funkcji, które hypervisor może łatwo zgłosić użytkownikowi.”

To jest traktowane jako poprawka, więc została wybrana dla Linuksa 6.2-rc6 zamiast czekać na następne okno scalania. Z kolei wkrótce zostanie przeportowany wstecz do stabilnej serii jądra Linuksa.
Wczorajsze x86/urgent pull request scharakteryzowało problem w następujący sposób: „Łatka SEV-SNP wygląda trochę obszerny i być może na pierwszy rzut oka niezbyt pilny materiał, ale jego intencją jest płynne niepowodzenie podczas uruchamiania starszych jąder na nowszych hiperwizorach, gdy te ostatnie obsługują funkcje, których te starsze jądra jeszcze nie znają. do stabilnego, więc wysłanie go teraz jest równie dobrym momentem, jak każdy inny… Poproś gościa SEV-SNP, aby wyraźnie sprawdził funkcje włączone przez hiperwizora i zawiódł z wdziękiem, jeśli niektóre nie są obsługiwane przez gościa, zamiast zawieść w nieoczywisty i trudny sposób-do-debugowania.”

Categories: IT Info