Linux 5.18:ssa on tarkoitus siirtää koodi uudempaan C-versioon erilaisten ongelmien ratkaisemiseksi. 

Mikä on Linux ja mihin se on tarkoitettu?

Prosessin aikana kehittäjäkeskustelu linux-ytimestä noin jal teema sarjasta korjaustiedostoja haavoittuvuuksien korjaamiseksi Spectrea koodissa työskennelläksesi linkitettyjen luetteloiden kanssa, tuli selväksi monille kehittäjille, että ongelma voitaisiin ratkaista helpommin, jos oli sallittu ytimen koodissa C que on standardin uudemman version mukainen. 

Ja tällä hetkellä Linux-ytimeen lisätyn koodin on oltava ANSI C (C89) -määrityksen mukainen, joka luotiin vuonna 1989.

Siksi Spectreen liittyvä ongelma koodissa johtui siitä, että sjatkoi iteraattorin käyttöä määritellään erikseen silmukan jälkeen.

Yleisesti nopeasta luonteestaan ​​huolimatta ydinprojekti perustuu useisiin vanhempiin työkaluihin. Vaikka kriitikot haluavat keskittyä yhteisön laajaan sähköpostin käyttöön, mahdollisesti merkittävämpi anakronismi on C-kielistandardin vuoden 1989 version käyttö ytimen koodissa, standardi, joka kodifioitiin ennen ydinprojektin alkamista yli 30 vuotta sitten. Näyttää siltä, ​​että tämä pitkäaikainen käytäntö saattaa päättyä heti ytimen 5.18:n myötä, odotettavissa tämän vuoden toukokuussa.

Mainitaan se makroa käytetään linkitetyn luettelon elementtien toistamiseen, ja koska silmukaiteraattori välitetään tälle makrolle, se määritellään itse silmukan ulkopuolella ja pysyy käytettävissä silmukan jälkeen. C99-standardin käyttäminen antaisi kehittäjille mahdollisuuden määritellä muuttujia silmukalle for()-lohkossa, mikä ratkaisisi ongelman ilman kiertotapoja.

Valitettavasti ytimessä on useita paikkoja, joissa luettelo on
iteraattoria käytetään sellaisen silmukan jälkeen, joka katkeaa tällaisessa muutoksessa. Onneksi
on skripti use_after_iter.cocci, jota voidaan käyttää tunnistamaan sellainen
koodien sijainnit. Minun piti muokata käsikirjoitusta hieman, koska se vähentää vääriä
positiivisia alkuperäisessä käyttötapauksessa, mutta ne liittyvät tähän korjaustiedostoon.

Useat raportoidut koodipaikat käyttävät luetteloiteraattoria vain sen jälkeen
sykli, jos siellä oli aikainen poistuminen (break/goto), ja siksi niitä ei ole
merkityksellisiä.

Omalta Linus Torvalds yhtyi ajatukseen voidakseen ottaa käyttöön tuen uudemmille määrityksille ja ehdotti edelleen siirtymistä ytimeen 5.18 käyttämään vuonna 11 julkaistua C2011-standardia.

Sen jälkeen alustavan tarkistuksen aikana asennus GCC:hen ja Clangiin uudessa tilassa sujui ilman poikkeamaa. Ellei laajemman testauksen vuoksi ilmene odottamattomia ongelmia, 5.18-ytimen rakennuskomentosarjat muuttavat '–std=gnu89'-vaihtoehdon arvoon '–std=gnu11 -Wno-shift-negative-value'.

Linus Torvalds ei pitänyt korjaustiedostosta kovinkaan paljon eikä ymmärtänyt, miten se liittyi spekulatiivisiin toteutushaavoittuvuuksiin. Kuitenkin, kun Koschel selitti tilannetta tarkemmin, Torvalds myönsi, että "tämä on vain normaali bugi, selkeä ja yksinkertainen" ja sanoi, että se pitäisi korjata riippumatta suuremmista sarjoista. Mutta sitten hän syventyi ongelman todelliseen lähteeseen: että luettelon läpikulkumakroihin siirretty iteraattori on ilmoitettava piirin ulkopuolella:

Suurin syy tämäntyyppiseen ei-spekulatiiviseen virheeseen on se, että meillä ei historiallisesti ollut C99-tyylisiä "declare variables in loops". Joten list_for_each_entry() - ja kaikki muut - suodattaa pohjimmiltaan aina viimeisen HEAD-merkinnän pois silmukasta, koska emme voineet ilmoittaa iteraattorimuuttujaa itse silmukassa.

On myös syytä mainita se harkittiin mahdollisuutta käyttää C17-standardia, mutta tässä tapauksessa GCC-version vähimmäistuettua versiota olisi lisättävä, koska C11-tuen sisällyttäminen vastaa GCC-version (5.1) nykyisiä vaatimuksia.

Vihdoin jos olet kiinnostunut tietämään siitä lisää, voit tarkistaa yksityiskohdat seuraava linkki.


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastaa tiedoista: AB Internet Networks 2008 SL
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.