Vývojári LLVM navrhujú bezpečné spracovanie vyrovnávacej pamäte v C++

Logo LLVM

LLVM je rámec pre vývoj kompilátorov, ako aj pomoc pri vytváraní nových programovacích jazykov a zlepšovaní existujúcich jazykov.

undefined vývojári projektu LLVM navrhli množstvo zmien zameraných na posilnenie bezpečnosti projektov C + + kritické a poskytujú prostriedky na odstránenie chýb spôsobených prekročením vyrovnávacej pamäte.

Návrh, ktorý vydali, sa ako taký zameriava najmä na prácu v dvoch oblastiach: poskytnutie vývojového modelu, ktorý umožňuje bezpečnú prácu s vyrovnávacími pamäťami a prácu na posilnení bezpečnosti štandardnej knižnice funkcií libc++.

Uvádza sa, že navrhovaný model bezpečného programovania pre C++ «je použiť triedy poskytované štandardnou knižnicou pri práci s vyrovnávacími pamäťami namiesto manipulácie s neupravenými ukazovateľmi». Napríklad sa navrhuje použiť triedy std::array, std::vector a std::span, ktoré budú pridané s kontrolou za behu pre alokovanú pamäť mimo hraníc.

Naším cieľom je zlepšiť bezpečnosť kritických báz kódu C++. Na tento účel plánujeme pracovať na dvoch nápadoch.

Spevnená štandardná knižnica C++
C++ Safe Buffer Programovací model a nástroje pre prijatie
Hardened libc++ je určený na zvýšenie bezpečnosti štandardných knižníc C++ vo všeobecnosti.

Bezpečný programovací model vyrovnávacej pamäte C++ spolu so spevnenou knižnicou libc++ poskytujú za behu obmedzenie prístupu do pamäte mimo hraníc. Adopčné nástroje zautomatizujú migráciu kódu do tohto nového programovacieho modelu.

Okrem toho sa v nej spomína aj to bojovať proti „nebezpečným“ programovacím praktikám v clang, ak navrhuje vydať varovania kompilátora pre všetky aritmetické operácie ukazovateľov, podobne ako varovania clang-tidy linter pri použití príznaku „cppcoreguidelines-pro-bounds-pointer-aritmetic“, ktorého podpora sa zobrazí v LLVM 16. Na povolenie takýchto upozornení sa do clang pridá samostatný príznak, ktorý je predvolene neaktívny .

Plánuje sa implementácia voliteľného ochranného režimu v libc++, ktorý, keď je povolený, zistí niektoré situácie, ktoré vedú k nedefinovanému správaniu počas behu. Napríklad v triedach std::span a std::vector, bude monitorovaný prístup mimo hraníc, v takom prípade program zlyhá.

Tieto dodatočné kontroly behu budú zoskupené do niekoľkých kategórií, ktoré možno ovládať samostatne. Zámerom je, aby predajca dodávajúci libc++ na svojej platforme mohol rozhodnúť, ktoré kontroly povolí v expedičnej knižnici (ak nejaké existujú), v závislosti od požadovanej úrovne zabezpečenia.

Vývojári veria, že pridaním takýchto zmien bude knižnica libc++ v súlade so štandardmi C++, pretože výber spôsobu riešenia prípadov nedefinovaného správania závisí od vývojárov knižníc, ktorí môžu okrem iného považovať nedefinované správanie za zámok, ktorý vyžaduje, aby program VÝCHOD.

L runtime kontroly v libc++ sa plánujú rozdeliť do kategórií ktoré môžu byť zahrnuté jednotlivo. Niektoré z navrhovaných kontrol, ktoré nevedú k zložitejším operáciám alebo zmenám ABI, sú už implementované v bezpečnom režime libc++ (bezpečný režim).

Aby som to zopakoval, konečným cieľom je, aby dodávaná knižnica umožnila tieto kontroly v produkcii; toto nie je funkcia „len ladenie“, aj keď nakoniec nahradí dlho nefunkčný „režim ladenia“.

Okrem toho, plánuje sa pripraviť súbor nástrojov na opravu kódu čo umožní nahradiť premenné nespracovanými ukazovateľmi v kontajneroch a použiť alternatívne obslužné programy v situáciách, keď kontajner nemôže priamo nahradiť ukazovateľ (napríklad konštrukt "if(array_pointer)" možno skonvertovať na "if(span.data ( )»).Nastavenia možno použiť nielen na lokálne premenné, ale aj na parametre typu s ukazovateľmi.

Spomína sa aj to zvažujete „kontrolu statického analyzátora clang“ citlivá na trasu, ktorá upozorní, ak std::span je skonštruovaný z kontajnera, ktorý je menší ako veľkosť špecifikovaná v konštruktore rozsahu. Uvedená kontrola je samostatná a užitočná sama o sebe, ak všetko pôjde dobre, bude predvolene povolená pre všetkých používateľov

Konečne ak máte záujem dozvedieť sa o tom viac, môžete skontrolovať podrobnosti v nasledujúci odkaz.


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Za údaje zodpovedá: AB Internet Networks 2008 SL
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.