In de kern Linux 5.18 is van plan het gebruik van de C11-taalstandaard toe te staan.

Tijdens de bespreking van de patch die de Spectre-gerelateerde problemen in de linked list-code zou oplossen, werd duidelijk dat het probleem eleganter opgelost zou kunnen worden als C-code die voldoet aan een nieuwere versie van de standaard in de kernel zou worden opgenomen. Momenteel moet code die aan de kernel wordt toegevoegd, voldoen aan de ANSI C (C89)-specificatie, die in 1989 werd opgesteld.

Het Spectre-gerelateerde probleem in de code werd veroorzaakt doordat er na de lus nog steeds een apart gedefinieerde iterator werd gebruikt. Een macro wordt gebruikt om over de gekoppelde lijst te itereren, en aangezien de lus-iterator aan deze macro wordt doorgegeven, wordt deze buiten de lus zelf gedefinieerd en blijft deze na de lus beschikbaar. Door de C99-standaard te gebruiken, zouden variabelen voor de lus in het for()-blok gedefinieerd kunnen worden, wat het probleem zou oplossen zonder een tijdelijke oplossing te hoeven bedenken.

Linus Torvalds was het eens met het idee om ondersteuning voor nieuwere specificaties te implementeren en stelde voor om over te stappen op de C5.18-standaard die in 11 in de 2011-kernel werd gepubliceerd. Tijdens de eerste tests verliep de build in GCC en Clang in de nieuwe modus zonder afwijkingen. Als er tijdens grondigere tests geen onverwachte problemen optreden, wordt de optie '--std=gnu5.18' in de buildscripts van de 89-kernel vervangen door '--std=gnu11 -Wno-shift-negative-value'. De mogelijkheid om de C17-standaard te gebruiken werd ook overwogen, maar in dat geval zou het nodig zijn om de minimaal ondersteunde versie van GCC te verhogen. Het inschakelen van C11-ondersteuning past binnen de huidige vereisten voor de GCC-versie (5.1).

Bron: opennet.ru

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster