De lancering van de nieuwe kernelversie Linux 6.13 is vertraagd vanwege stabiliteitsproblemen gegenereerd als gevolg van een wijziging die is aangebracht door een Microsoft-medewerker. Er wordt vermeld dat deze verandering afgelopen november in de hoofdtak werd geaccepteerd op een manier die velen verraste, omdat deze niet volgens de gebruikelijke praktijken verliep.
De patch is op een niet-standaard manier verzonden en goedgekeurd zonder ontvangstbevestigingen (ACK) door een collega van de beheerders van de x86-architectuur, wat een schending vormt van geaccepteerde standaarden in de kernelontwikkeling.
De betreffende patch is geïntroduceerd ondersteuning voor het gebruik van grote geheugenpagina's in de ROX-modus (alleen-lezen en uitvoerbaar) bij het toewijzen van geheugen bedoeld voor uitvoerbare code en het doel van de verzonden patch was Verbeter de systeembeveiliging door het moeilijker te maken kwetsbaarheden te misbruiken door kwaadaardige code uit te voeren in het geheugen dat als alleen-lezen is gemarkeerd.
Het gebruik van grote pagina's om tekstgebieden in kaart te brengen vermindert de iTLB-druk en verbetert de prestaties.
Breid execmem_alloc() uit met de mogelijkheid om grote pagina's met ROX-rechten te gebruiken als cache voor kleinere toewijzingen. Om de cache te vullen, wordt een grote beschrijfbare pagina toegewezen vanuit vmalloc met VM_ALLOW_HUGE_VMAP, gevuld met ongeldige instructies en vervolgens opnieuw toegewezen als ROX.
De directe kaartalias van die grote pagina is uitgesloten van de directe kaart. Delen van die grote pagina worden aan bellers van execmem_alloc() gegeven zonder enige wijziging in de machtigingen. Wanneer het geheugen wordt vrijgemaakt met execmem_free(), wordt het opnieuw ongeldig gemaakt, zodat het geen verouderde instructies bevat.
Er wordt vermeld dat de vertraging in kernel 6.13-release het is omdat met behulp van een grote uitvoerbare geheugenpaginacache in de modus ROX was standaard ingeschakeld voor modules op x86_64-systemen. De wijziging loste een groot technisch probleem op: de toewijzing van pagina's in ROX-modus voor uitvoerbare code die nog niet volledig was voorbereid.
Dit voorkwam de noodzaak om pagina's tijdelijk opnieuw toe te wijzen van ROX-modus naar schrijfmodus totdat de kernelmodules klaar waren om te draaien. Ondanks de verwachte voordelen zorgen de vastgestelde stabiliteitsproblemen echter voor twijfel over de kwaliteit en veiligheid van de patch, wat leidt tot de noodzaak om het testen uit te breiden vóór de definitieve release.
En het lijkt erop dat de ontwikkelaars geen ongelijk hadden, aangezien tijdens de laatste testfase van de Linux 6.13-kernel een Intel-ingenieur een kritiek probleem ontdekt dat beïnvloedde de werking van het systeem op sommige laptops met processors gebaseerd op de Alderlake-microarchitectuur. Het probleem manifesteerde zich bij een poging de kernel uit de slaapmodus te halen, een bijzonder relevante fout op mobiele apparaten.
x86: EXECMEM_ROX-ondersteuning uitschakelen
De module_writable_address() veroorzaakte een gigantische puinhoop.
Alternative.c, om nog maar te zwijgen van het feit dat het nog steeds bugs bevat, waarvan sommige opmerkelijk zijn.
De CFI-varianten falen en falen.Mike heeft gewerkt aan patches om dit allemaal weer op te schonen, maar gezien de huidige situatie is dit simpelweg nog niet klaar.
Schakel het voorlopig uit, laten we het opnieuw proberen in de volgende cyclus.
Het probleem ontstond bij het compileren van de kernel met de Clang-compiler en schakel de CFI-beveiligingsmodus in (Controlestroomintegriteit). Deze modus is ontworpen om de beveiliging te versterken door ongepaste manipulaties van de controlestroom te blokkeren, zoals die plaatsvinden bij aanvallen die functieaanwijzingen in het geheugen veranderen. De interactie tussen CFI en nieuwe optimalisaties geïntroduceerd in de kernel voor het verwerken van ROX-geheugenpagina's (alleen-lezen en uitvoerbaar) bleek echter problematisch.
Het mechanisme EXECMEM_ROX, waarmee een cache van uitvoerbare geheugenpagina's kan worden gebruikt die zijn gemarkeerd als alleen-lezen, bleek de hoofdoorzaak te zijn van de fouten die werden waargenomen bij het opnieuw activeren van het systeem. Als tijdelijke oplossing stelden de Intel- en AMD-onderhouders die verantwoordelijk waren voor de x86-architectuur voor om EXECMEM_ROX uit te schakelen in kernelversie 6.13. Hierdoor kan de kernel worden vrijgegeven terwijl wordt gewerkt aan een definitieve patch die het probleem oplost zonder de stabiliteit of veiligheid in gevaar te brengen.