In Linux-kernel 5.18 wordt het gebruik van de C11-taalstandaard mogelijk gemaakt

Tijdens de discussie over de patchset die kwetsbaarheden van het Spectre-type in de code voor het werken met gelinkte lijsten aanpakt, werd duidelijk dat het probleem eleganter opgelost zou kunnen worden als de kernel code in de C-taal zou toelaten volgens een nieuwere versie van de standaard. Momenteel moet de toegevoegde kernelcode voldoen aan de ANSI C-specificatie (C89), die in 1989 is opgesteld.

Het probleem in de code dat verband houdt met Spectre werd veroorzaakt door het voortzetten van het gebruik van een apart gedefinieerde iterator na de lus — voor het doorlopen van de elementen van de gelinkte lijst wordt een macro gebruikt, en omdat de iterator van de lus aan deze macro wordt doorgegeven, wordt hij buiten de lus gedefinieerd en blijft hij na de lus toegankelijk. Het gebruik van de C99-standaard zou het mogelijk maken om variabelen voor de lus in het for()-blok te definiëren, wat het probleem zonder omwegen zou oplossen.

Linus Torvalds stemde in met het idee om ondersteuning voor nieuwere specificaties te implementeren en stelde voor om in kernel 5.18 over te stappen op het gebruik van de C11-standaard, die in 2011 is gepubliceerd. Bij een eerste controle passeerde de build in GCC en Clang in de nieuwe modus zonder afwijzingen. Als er tijdens verdere tests geen onvoorziene problemen optreden, zal in de buildscripts voor kernel 5.18 de optie ‘—std=gnu89’ worden vervangen door ‘—std=gnu11 -Wno-shift-negative-value’. De mogelijkheid om de C17-standaard te gebruiken werd ook overwogen, maar in dat geval zou de minimaal ondersteunde versie van GCC moeten worden verhoogd. De ondersteuning voor C11 valt binnen de huidige eisen voor de GCC-versie (5.1).

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster