Dezvoltatorii LLVM propun o gestionare sigură a bufferului în C++

Logo LLVM

LLVM este un cadru pentru dezvoltarea compilatoarelor, precum și pentru a ajuta la construirea de noi limbaje de programare și la îmbunătățirea limbajelor existente.

L dezvoltatorii proiectului LLVM au propus o serie de modificări menite să consolideze securitatea a proiectelor C ++ misiune critică și oferă un mijloc de a elimina erorile cauzate de depășirile de buffer.

Ca atare, propunerea pe care au lansat-o se concentrează pe lucrul în două domenii în special: furnizarea unui model de dezvoltare care să permită lucrul în siguranță cu buffere și lucrul pentru a consolida securitatea bibliotecii de funcții standard libc++.

Se menționează că modelul de programare securizat propus pentru C++ «este să folosiți clasele furnizate de biblioteca standard atunci când lucrați cu buffere în loc să manipulați pointerii bruti». De exemplu, se propune utilizarea claselor std::array, std::vector și std::span, care vor fi adăugate cu o verificare a timpului de execuție pentru memoria alocată în afara limitelor.

Scopul nostru este de a îmbunătăți securitatea bazelor critice de cod C++. Pentru aceasta ne propunem să lucrăm la două idei.

Bibliotecă standard C++ consolidată
Model de programare C++ Safe Buffer și instrumente de adoptare
Hardened libc++ are scopul de a face interfețele bibliotecii standard C++ mai sigure în general.

Modelul de programare tampon sigur al C++ împreună cu libc++ consolidat asigură atenuarea timpului de execuție a accesului la memorie în afara limitelor. Instrumentele de adoptare vor automatiza migrarea codului la acest nou model de programare.

Pe lângă aceasta, se mai menționează că pentru combaterea practicilor de programare „periculoase”. în clang, dacă propune să emită avertismente pentru compilator pentru toate operațiile aritmetice cu pointer, similar cu avertismentele clang-tidy linter atunci când utilizați indicatorul „cppcoreguidelines-pro-bounds-pointer-arithmetic”, suport pentru care va apărea în LLVM 16. Pentru a activa astfel de avertismente, un semnal separat va fi adăugat la clang, inactiv în mod implicit .

Este planificată implementarea unui mod opțional de protecție în libc++, care, atunci când este activat, va detecta unele situații care duc la un comportament nedefinit în timpul execuției. De exemplu, la cursuri std::span și std::vector, un acces în afara limitelor va fi monitorizat, caz în care programul va eșua.

Aceste verificări suplimentare de rulare vor fi grupate în mai multe categorii care pot fi controlate separat. Intenția este ca un furnizor care livrează libc++ pe platforma lor să poată decide ce verificări să activeze în biblioteca de expediere (dacă există), în funcție de nivelul de securitate dorit.

Dezvoltatorii cred că adăugarea unor astfel de modificări va menține libc++ compatibil cu standardele C++, deoarece alegerea modului de tratare a cazurilor de comportament nedefinit revine dezvoltatorilor de biblioteci, care pot, printre altele, să trateze comportamentul nedefinit ca pe o blocare care necesită programul să Ieșire.

Las Verificările de rulare în libc++ sunt planificate să fie împărțite în categorii care pot fi incluse individual. Unele dintre verificările sugerate care nu au ca rezultat operațiuni mai complexe sau modificări ABI sunt deja implementate în modul sigur (modul sigur) al libc++.

Pentru a reitera, scopul final este ca biblioteca expediată să permită aceste verificări în producție; aceasta nu este o caracteristică „doar depanare”, deși în cele din urmă va înlocui „modul de depanare” întrerupt de mult timp.

În plus, este planificată pregătirea unui set de instrumente de corectare a codului care va permite variabilelor să fie înlocuite cu pointeri bruti în containere și să aplice handlere alternative în situațiile în care containerul nu poate înlocui direct pointerul (de exemplu, constructul „if(array_pointer)” poate fi convertit în „if(span.data ( )»).Setarile pot fi aplicate nu numai variabilelor locale, ci si parametrilor de tip cu pointeri.

Se mai mentioneaza ca iau în considerare un „verificator pentru analizor static zgomot” ruta sensibilă care avertizează dacă std::span este construit dintr-un container care este mai mic decât dimensiunea specificată în constructorul span-ului. Verificatorul menționat este autonom și util în sine, dacă totul merge bine, va fi activat implicit pentru toți utilizatorii

În cele din urmă dacă sunteți interesat să aflați mai multe despre asta, puteți verifica detaliile în următorul link.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.