V jadre Linux 5.18 plánujú povoliť používanie štandardu jazyka C11

V procese diskusie o súbore patchov na opravu problémov súvisiacich s chybami triedy Spectre v kóde na prácu s prepojenými zoznamami sa ukázalo, že by sa problém dal elegantnejšie vyriešiť, keby sa do jadra pripúšťal kód v jazyku C, ktorý zodpovedá novšej verzii štandardu. V súčasnosti musí pridaný kód do jadra vyhovovať špecifikácii ANSI C (C89), ktorá bola stanovená už v roku 1989.

Problém v kóde súvisiaci so Spectre bol spôsobený pokračovaním v používaní samostatne definovaného iterátora po cykle - na prechádzanie prvkami prepojeného zoznamu sa používa makro, a preto sa iterátor cyklu prenáša do tohto makra, je definovaný mimo samotného cyklu a zostáva prístupný po cykle. Použitie štandardu C99 by umožnilo definovať premenné pre cyklus v bloku for(), čo by problém vyriešilo bez vymýšľania obchádzok.

Linus Torvalds súhlasil s myšlienkou implementácie podpory novších špecifikácií a navrhol prejsť v jadre 5.18 na používanie štandardu C11, ktorý bol publikovaný v roku 2011. Pri predbežnej kontrole bola kompilácia v GCC a Clang v novom režime bez chýb. Ak sa pri dôkladnejšom testovaní nevyskytnú nepredvídané problémy, v kompilovacích skriptoch jadra 5.18 bude možnosť ‘—std=gnu89’ nahradená za ‘—std=gnu11 -Wno-shift-negative-value’. Zvažovala sa aj možnosť použitia štandardu C17, ale v takom prípade by bolo potrebné zvýšiť minimálne podporovanú verziu GCC. Zaradenie podpory C11 však zapadá do aktuálnych požiadaviek na verziu GCC (5.1).

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster