A Linux 5.18 esetében a tervek szerint áthelyezik a kódot a C egy újabb verziójába, hogy megoldják a különböző problémákat. 

Mi az a Linux és mire való?

A folyamat során fejlesztői beszélgetés a linux kernelről kb ésl témája egy sor javítások a sebezhetőségek kijavításához Spectre a kódban a hivatkozott listákkal való együttműködéshez, világossá vált sok fejlesztő számára ez a probléma könnyebben meg lehetne oldani, ha engedélyezve volt a kernelkódban C que megfelel a szabvány újabb verziójának. 

És jelenleg a Linux kernelhez hozzáadott kódnak meg kell felelnie az ANSI C (C89) specifikációnak, amelyet 1989-ben alakítottak ki.

Ezért a Spectre-hez kapcsolódó probléma a kódban azért volt, mert sfolyamatosan iterátort használtunk a ciklus után külön meghatározva.

Általában gyors jellege ellenére a kernelprojekt számos régebbi eszközre támaszkodik. Míg a kritikusok szeretnek a közösség széleskörű e-mail-használatára összpontosítani, valószínűleg jelentősebb anakronizmus a C nyelvi szabvány 1989-es verziójának használata a kernelkódhoz, amely szabvány a kernelprojekt több mint 30 évvel ezelőtti elindítása előtt kodifikált. Úgy tűnik, ez a régóta fennálló gyakorlat véget érhet, amint az 5.18-as kernel, várhatóan ez év májusában.

Azt emlegetik egy makrót használnak a hivatkozott lista elemei közötti iterációra, és mivel a hurokiterátort ennek a makrónak adják át, a cikluson kívül van meghatározva, és elérhető marad a ciklus után is. A C99 szabvány használata lehetővé tenné a fejlesztők számára, hogy változókat definiáljanak a for() blokkban lévő ciklushoz, ami megoldaná a problémát anélkül, hogy megkerülő megoldásokat találnának ki.

Sajnos a rendszermagban több helyen is megtalálható a lista
Az iterátort az ilyen változáskor megszakadó ciklus után használjuk. szerencsére
létezik a use_after_iter.cocci szkript, amivel azonosítani lehet
kódhelyek. Kicsit módosítanom kellett a forgatókönyvet, mivel csökkenti a hamis értéket
pozitívumok az eredeti használati esetben, de ezek a javításra vonatkoznak.

A jelentett kódhelyek nagy választéka csak ezután használja a lista iterátort
a ciklus, ha volt egy korai kilépés (break/goto), és ezért nem
ide vonatkozó.

A maga részéről Linus Torvalds egyetértett az ötlettel lehetővé tette az újabb specifikációk támogatásának megvalósítását, és javasolta az 5.18-as kernelre való áttérést a 11-ben kiadott C2011 szabvány használatára.

Ezt követően az előzetes ellenőrzés során a GCC-re és a Clang-re való szerelés az új módban eltérés nélkül ment. Hacsak nem merülnek fel előre nem látható problémák a kiterjedtebb tesztelés miatt, az 5.18-as kernel build szkriptjei a „–std=gnu89” beállítást „–std=gnu11 -Wno-shift-negative-value” értékre módosítják.

Linus Torvaldsnak nem nagyon tetszett a javítás, és nem látta, hogyan kapcsolódik a spekulatív végrehajtási sebezhetőségekhez. Miután azonban Koschel tovább magyarázta a helyzetet, Torvalds egyetértett azzal, hogy "ez csak egy normál hiba, egyszerű és egyszerű", és azt mondta, hogy a nagyobb sorozattól függetlenül ki kell javítani. De aztán beleásta magát a probléma valódi forrásába: hogy a listabejárási makróknak átadott iterátort magán a cikluson kívüli hatókörben kell deklarálni:

Az ilyen típusú nem spekulatív hibák fő oka az, hogy történelmileg nem volt C99-stílusú "változók deklarálása ciklusokban". Tehát a list_for_each_entry() - és az összes többi - alapvetően mindig az utolsó HEAD bejegyzést szűri ki a ciklusból, egyszerűen azért, mert magában a ciklusban nem tudtuk deklarálni az iterátorváltozót.

Érdemes megemlíteni azt is mérlegelték a C17 szabvány alkalmazásának lehetőségét, de ebben az esetben szükséges lenne a minimálisan támogatott GCC verzió növelése, mivel a C11 támogatás beépítése megfelel a GCC verzió (5.1) jelenlegi követelményeinek.

Végül ha érdekel, hogy többet tudjon meg róla, ellenőrizheti a részleteket a következő link.


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: AB Internet Networks 2008 SL
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.