Nel kernel Linux 5.18 si prevede di consentire l'uso dello standard del linguaggio C C11

Durante il dibattito su un insieme di patch per correggere i problemi di vulnerabilità della classe Spectre nel codice per l'elaborazione di elenchi collegati, è emerso chiaramente che il problema sarebbe stato risolto in modo più elegante se fosse stata consentita l'inclusione di codice C conforme a una versione più recente dello standard nel kernel. Attualmente, il codice kernel aggiunto deve rispettare la specifica ANSI C (C89), formulata nel 1989.

Il problema legato a Spectre nel codice è stato causato dal continuo utilizzo di un iteratore definito separatamente dopo il ciclo: per iterare sugli elementi di una lista collegata, si utilizza una macro e poiché l'iteratore del ciclo viene passato a questa macro, esso è definito al di fuori del ciclo stesso e rimane accessibile dopo il ciclo. L'uso dello standard C99 consentirebbe di definire le variabili del ciclo nel blocco for(), risolvendo così il problema senza dover inventare soluzioni alternative.

Linus Torvalds ha concordato con l'idea di implementare il supporto per specifiche più recenti e ha proposto di passare nel kernel 5.18 all'uso dello standard C11, pubblicato nel 2011. Durante un controllo preliminare, la compilazione in GCC e Clang nella nuova modalità è stata eseguita senza errori. Se durante test più approfonditi non si presentano problemi imprevisti, negli script di compilazione del kernel 5.18 l'opzione '—std=gnu89' sarà sostituita con '—std=gnu11 -Wno-shift-negative-value'. È stata anche presa in considerazione la possibilità di utilizzare lo standard C17, ma in tal caso sarebbe stato necessario innalzare la versione minima supportata di GCC. L'inclusione del supporto per C11 rientra nei requisiti attuali per la versione di GCC (5.1).

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster