Linux kernel 5.18 is van plan het gebruik van de C-taalstandaard C11 toe te staan

Terwijl we een reeks patches bespraken om Spectre-gerelateerde problemen in de gekoppelde lijstcode op te lossen, werd het duidelijk dat het probleem op een elegantere manier opgelost zou kunnen worden als C-code die voldoet aan een nieuwere versie van de standaard in de kernel zou worden toegelaten. Momenteel moet de toegevoegde kernelcode voldoen aan de ANSI C (C89)-specificatie, gevormd in 1989.

Een Spectre-gerelateerd probleem in de code werd veroorzaakt door het voortdurende gebruik van een afzonderlijk gedefinieerde iterator na de lus: een macro wordt gebruikt om de elementen van een gekoppelde lijst te herhalen, en omdat de lus-iterator in die macro wordt doorgegeven, is deze gedefinieerd buiten de lus zelf en blijft beschikbaar na de lus. Door gebruik te maken van de C99-standaard kunnen lusvariabelen worden gedefinieerd in een for()-blok, waardoor het probleem kan worden opgelost zonder dat er oplossingen hoeven te worden bedacht.

Linus Torvalds was het eens met het idee om ondersteuning voor nieuwere specificaties te implementeren en stelde voor om de 5.18-kernel te verplaatsen naar de C11-standaard, gepubliceerd in 2011. Tijdens voorlopige tests verliep de assemblage in GCC en Clang in de nieuwe modus zonder afwijkingen. Als er tijdens grondiger testen geen onverwachte problemen optreden, zal de optie '--std=gnu5.18' in de 89 kernelbuildscripts worden vervangen door '--std=gnu11 -Wno-shift-negative-value'. Er werd ook rekening gehouden met de mogelijkheid om de C17-standaard te gebruiken, maar in dit geval zou het nodig zijn om de minimaal ondersteunde versie van GCC te verhogen. Het opnemen van C11-ondersteuning past in de huidige vereisten voor de GCC-versie (5.1).

Bron: opennet.ru

Voeg een reactie