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

Durante la discussione su una serie di patch per risolvere i problemi relativi a Spectre nel codice dell'elenco collegato, è diventato chiaro che il problema avrebbe potuto essere risolto in modo più efficace se il codice C conforme a una versione più recente dello standard fosse stato consentito nel kernel. Attualmente, il codice del kernel aggiunto deve essere conforme alla specifica ANSI C (C89), creata nel 1989.

Un problema relativo a Spectre nel codice è stato causato dall'uso continuato di un iteratore definito separatamente dopo il ciclo: una macro viene utilizzata per scorrere gli elementi di un elenco collegato e poiché l'iteratore del ciclo viene passato a quella macro, è definito all'esterno del ciclo stesso e rimane disponibile dopo il ciclo. L'uso dello standard C99 consentirebbe di definire le variabili del ciclo in un blocco for(), il che risolverebbe il problema senza dover trovare soluzioni alternative.

Linus Torvalds era d'accordo con l'idea di implementare il supporto per le specifiche più recenti e propose di spostare il kernel 5.18 per utilizzare lo standard C11, pubblicato nel 2011. Durante i test preliminari, l'assemblaggio in GCC e Clang nella nuova modalità è passato senza deviazioni. Se non si verificano problemi imprevisti durante test più approfonditi, l'opzione '--std=gnu5.18' negli script di compilazione del kernel 89 verrà sostituita con '--std=gnu11 -Wno-shift-negative-value'. È stata presa in considerazione anche la possibilità di utilizzare lo standard C17, ma in questo caso sarebbe necessario aumentare la versione minima supportata di GCC. L'inclusione del supporto C11 si adatta agli attuali requisiti per la versione GCC (5.1).

Fonte: opennet.ru

Aggiungi un commento