Red Hot Cyber

Sicurezza informatica, cybercrime, hack
news, e altro ancora
  • English

Linux Torvalds autorizza l’aggiornamento del Kernel Linux a C11 del 2011.

Sappiamo tutti che Linux è scritto in C. Quello che potresti non sapere è che è scritto in un dialetto C obsoleto da tempo: la versione del 1989 dello standard del linguaggio C, C89.

Questo è anche noto come ANSI X3.159-1989, o ANSI C. Linus Torvalds ha deciso che sposterà Linux alla versione del C standard C11 del 2011.

Questa non è una transizione così grande come potrebbe sembrare. C89 ha ancora un supporto quasi universale. Poiché qualsiasi compilatore C è compatibile con le versioni precedenti, non avrai problemi a compilare o eseguire un programma C89. Quindi, un compilatore conforme a C11 non avrà alcun problema con alcun codice legacy C89.

Allora perché preoccuparsi? La modifica apportata non include funzionalità utili che appaiono nelle versioni più recenti.

Advertisements

La situazione è giunta all’attenzione di Torvald quando, al fine di correggere un potenziale problema di sicurezza con le funzioni di esecuzione speculativa primitiva della lista collegata del kernel, è stato rivelato un altro problema nella patch.

Mentre risolveva questo problema, Torvalds si rese conto che in C99 l’iteratore passato alle macro list-traversal doveva essere dichiarato in un ambito esterno al ciclo stesso.

Torvalds ha scritto alla Linux Kernel Mailing List (LKML) che

“l’intera ragione per cui questo tipo di bug non speculativo può verificarsi è che storicamente non si erano dichiarate variabili in loop in stile C99. Quindi list_for_each_entry() – e tutte le altre – fondamentalmente perde sempre l’ultima voce HEAD fuori dal ciclo, semplicemente perché non potevamo dichiarare la variabile iteratore nel ciclo stesso.”

Infine, passare da C89 a un C standard più recente che rende questo tipo di problema non può verificarsi. Quindi:

Advertisements

“era giunto il momento di passare allo standard C99 che ha ancora più di 20 anni, ma è almeno abbastanza recente da consentire dichiarazioni di variabili a livello di blocco”.


Lo sviluppatore del kernel Linux, Arnd Bergmann, ha convenuto che ciò fosse fattibile. Ha aggiunto che dovrebbe essere possibile passare allo standard C11 del 2011. Dal momento che C99 non è mai stato così popolare e C11 ha introdotto il supporto multithreading standardizzato e ha reso il linguaggio un po’ più sicuro, sembra sia una buona mossa.

Anche questa sarebbe una mossa facile da fare. Il compilatore C minimo del kernel Linux, GCC versione 5.1 supporta già C11. Questo funziona per Torvalds.

“Mi piacerebbe davvero andare avanti finalmente su questo, considerando che è stato collaudato per molti molti anni”.

Quindi, dopo essersi assicurato che il nuovo standard C funzionasse senza problemi nel kernel, Torvalds ha deciso di premere il grilletto.

“Proviamo all’inizio della finestra di unione 5.18 .”

Poiché la finestra di unione della 5.18 è quasi arrivata, potremmo avere il codice C11 nel kernel già a marzo.