Κατά τη συζήτηση του συνόλου ενημερώσεων κώδικα που διόρθωσε τα προβλήματα που σχετίζονται με το Spectre στον κώδικα της συνδεδεμένης λίστας, κατέστη σαφές ότι το πρόβλημα θα μπορούσε να λυθεί πιο χαριτωμένα εάν επιτρεπόταν στον πυρήνα ο κώδικας C που συμμορφωνόταν με μια νεότερη έκδοση του προτύπου. Επί του παρόντος, ο κώδικας που προστίθεται στον πυρήνα πρέπει να συμμορφώνεται με την προδιαγραφή ANSI C (C89), η οποία δημιουργήθηκε το 1989.
Το πρόβλημα που σχετίζεται με το φάσμα στον κώδικα προκλήθηκε από τη συνέχιση της χρήσης ενός ξεχωριστά καθορισμένου επαναλήπτη μετά τον βρόχο - μια μακροεντολή χρησιμοποιείται για επανάληψη στη συνδεδεμένη λίστα και εφόσον ο επαναλήπτης βρόχου μεταβιβάζεται σε αυτήν τη μακροεντολή, ορίζεται εκτός του ίδιου του βρόχου και παραμένει διαθέσιμη μετά τον βρόχο. Η χρήση του προτύπου C99 θα επέτρεπε τον καθορισμό μεταβλητών για τον βρόχο στο μπλοκ for(), που θα έλυνε το πρόβλημα χωρίς να χρειάζεται να βρούμε λύσεις.
Ο Linus Torvalds συμφώνησε με την ιδέα της υλοποίησης υποστήριξης για νεότερες προδιαγραφές και πρότεινε τη μετακίνηση του πυρήνα 5.18 για χρήση του προτύπου C11, που δημοσιεύτηκε το 2011. Κατά τη διάρκεια των προκαταρκτικών δοκιμών, το build στο GCC και το Clang στη νέα λειτουργία πέρασε χωρίς αποκλίσεις. Εκτός εάν η περαιτέρω δοκιμή αποκαλύψει τυχόν απροσδόκητα ζητήματα, τα σενάρια δημιουργίας πυρήνα 5.18 θα αντικαταστήσουν την επιλογή '--std=gnu89' με την επιλογή '--std=gnu11 -Wno-shift-negative-value'. Εξετάστηκε επίσης η δυνατότητα χρήσης του προτύπου C17, αλλά σε αυτήν την περίπτωση θα ήταν απαραίτητο να αυξηθεί η ελάχιστη υποστηριζόμενη έκδοση του GCC. Η ενεργοποίηση της υποστήριξης C11 ταιριάζει στις τρέχουσες απαιτήσεις για την έκδοση GCC (5.1).
Πηγή: opennet.ru
