Aaron Ballman, a Clang fő karbantartója és a WG21 (C++) és WG14 (C) szabványfejlesztő csapatok tagja megkezdte a Clang fordítóba a biztonsági mód hozzáadásának megvitatását. Az új mód lehetővé teszi, hogy egyszerre aktiváljanak egy biztonsági védelmi opciókészletet, hasonlóan a GCC 14-ben hozzáadott "-fhardened" flaghez, amely aktiválja az "-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=zero -fPIE -pie -Wl,-z,relro,-z,now -fstack-protector-strong -fstack-clash-protection -fcf-protection=full" opciókat.
Jelenleg folyamatban van a biztonsági védelmi lehetőségek hozzáadása a C és C++ szabványokhoz, de ez a folyamat nem gyors, mivel a Clang már elérhető egyedi opciókat kínál további védelmi mechanizmusokkal. A védelmi módszerek gyakran különböző inkompatibilitásokat okoznak a meglévő kóddal vagy az ABI megsértését, ami megakadályozza azok alapértelmezett aktiválását. Ezenkívül az ilyen opciók szétszórtak (fordítási vezérlő flagok, gépi utasítások generálásához kapcsolódó flagok, hardverarchitektúrákhoz kötődő figyelmeztetések, diagnosztikai módok, makrók), rosszul dokumentáltak, és sok fejlesztő figyelmen kívül hagyja őket.
A központi beállítás egységesíti a biztonsági opciók aktiválását és megkönnyíti azok alkalmazását. Több lehetőséget is fontolóra vesznek a biztonsági mód aktiválására, például a "-fhardened" flag, a "--config=hardened" beállításcsomag, egy külön vezérlő (clang --driver-mode) vagy külön opciók, mint a "-fhardened, -mhardened és -Whardened" a fordítás, kódgenerálás és figyelmeztetési kimenet szempontjából. A mód kiterjedhet a következőkre:
- A fordító képességei: -ftrivial-auto-var-init, -fPIE, -fcf-protection stb.
- A célplatformok kódgenerálásához kapcsolódó képességek: -mspeculative-load-hardening, -mlvi-hardening stb.
- Figyelmeztetések: -Wall, -Wextra, -Werror=return-type stb.
- Biztonsági erősítési módok a standard függvénytárban.
- Makrók: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS stb.
- Követelmény az alkalmazott nyelvi szabvány explicit kiválasztására.
- A C89 és C++98 elavult szabványainak használatára vonatkozó kód fordításának megtagadása.
- További flagok átadása a linkernek, például a címek véletlenítéséhez.
Forrás: opennet.ru
