Za Linux 5.18 planira se prebaciti kod na noviju verziju C-a kako bi se riješili različiti problemi. 

Što je Linux i čemu služi?

Tijekom procesa od rasprava o programerima linux kernela o il tema skupa zakrpe za ispravljanje ranjivosti Spectre u kodu za rad s povezanim listama, postalo je jasno za mnoge programere taj problem moglo bi se lakše riješiti ako bi bilo dopušteno u kodu kernela C que je u skladu s novijom verzijom standarda. 

A to je da trenutno kod dodan Linux kernelu mora biti u skladu s ANSI C (C89) specifikacijom, koja je formirana 1989. godine.

Zbog toga problem vezan za Spectre u kodu je bio jer se nastavio koristiti iterator definirano zasebno nakon petlje.

Unatoč svojoj općenito brzoj prirodi, kernel projekt se oslanja na niz starijih alata. Dok se kritičari vole usredotočiti na opsežnu upotrebu e-pošte u zajednici, vjerojatno značajniji anakronizam je korištenje verzije standarda jezika C iz 1989. za kernel kod, standarda koji je kodificiran prije nego što je projekt kernel započeo prije više od 30 godina. Čini se da bi toj dugogodišnjoj praksi mogao doći kraj čim kernel 5.18, koji se očekuje u svibnju ove godine.

Spominje se da makronaredba se koristi za ponavljanje elemenata povezanog popisa, a budući da je iterator petlje proslijeđen ovoj makronaredbi, definiran je izvan same petlje i ostaje dostupan nakon petlje. Korištenje standarda C99 omogućilo bi programerima da definiraju varijable za petlju u bloku for(), što bi riješilo problem bez izmišljanja zaobilaznih rješenja.

Nažalost, postoji više mjesta u kernelu gdje se nalazi popis
iterator se koristi nakon petlje koja se prekida pri takvoj promjeni. na sreću
postoji skripta use_after_iter.cocci koja se može koristiti za identifikaciju takvih
kodna mjesta. Morao sam malo prilagoditi skriptu jer smanjuje lažno
pozitivne u izvornom slučaju upotrebe, ali one su relevantne za ovu zakrpu.

Veliki broj prijavljenih lokacija koda koristi samo iterator popisa nakon
ciklus ako je došlo do ranog izlaska (break/goto) i stoga nisu
relevantni.

Sa svoje strane, Linus Torvalds se složio s tom idejom kako bi mogao implementirati podršku za novije specifikacije i dodatno predložio prelazak na kernel 5.18 za korištenje standarda C11, objavljenog 2011.

Nakon toga, tijekom preliminarne provjere, montaža na GCC i Clang u novom načinu rada prošla je bez odstupanja. Osim ako se ne pojave nepredviđeni problemi zbog opsežnijeg testiranja, skripte za izgradnju kernela 5.18 promijenit će opciju '–std=gnu89' u '–std=gnu11 -Wno-shift-negative-value'.

Linusu Torvaldsu se zakrpa nije previše svidjela i nije vidio kako je povezan sa ranjivostima spekulativnog izvršenja. Međutim, nakon što je Koschel dodatno objasnio situaciju, Torvalds se složio da je "ovo samo normalan bug, jednostavan i jednostavan" i rekao da ga treba popraviti bez obzira na veću seriju. Ali onda je došao do pravog izvora problema: da iterator proslijeđen makronaredbama za prelazak liste mora biti deklariran u opsegu izvan same petlje:

Glavni razlog zašto se ova vrsta nespekulativne pogreške može pojaviti je taj što povijesno nismo imali "deklariranje varijabli u petljama" u stilu C99. Dakle, list_for_each_entry() - i svi ostali - u osnovi uvijek filtriraju posljednji HEAD unos iz petlje, jednostavno zato što nismo mogli deklarirati varijablu iteratora u samoj petlji.

To je također vrijedno spomenuti razmatrana je mogućnost korištenja standarda C17, ali u ovom slučaju bilo bi potrebno povećati minimalnu podržanu verziju GCC-a, budući da je uključivanje podrške za C11 u skladu s trenutnim zahtjevima za GCC verziju (5.1).

Konačno ako vas zanima više o tome, detalje možete provjeriti u sljedeći link.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Odgovoran za podatke: AB Internet Networks 2008 SL
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.