Proiectul LLVM dezvoltă instrumente pentru lucru sigur cu buffer-e în C++

Dezvoltatorii proiectului LLVM au propus o serie de modificări menite să îmbunătățească securitatea proiectelor critice scrise în C++ și să ofere mijloace pentru excluderea erorilor cauzate de depășirea limitelor acceptabile ale bufferelor. Lucrările se concentrează pe două direcții: furnizarea unui model de dezvoltare care să permită lucrul în condiții de siguranță cu buffere și întreprinderea de măsuri pentru întărirea protecției bibliotecii standard de funcții libc++.

Modelul propus de programare sigură pentru C++ preconizează utilizarea claselor oferite de biblioteca standard atunci când se lucrează cu buffere, în locul manipulării unor pointeri brut. De exemplu, se sugerează utilizarea claselor std::array, std::vector și std::span, în care va fi adăugată o verificare a depășirii limitelor memoriei alocate, efectuată în timpul execuției.

Pentru a combate practicile de programare periculoase, clang propune emiterea de avertizări de compilare pentru toate operațiile aritmetice cu pointeri, similare cu avertizările linter-ului clang-tidy, generate atunci când se utilizează opțiunea «cppcoreguidelines-pro-bounds-pointer-arithmetic», suportul căreia va apărea în versiunea LLVM 16. Pentru a activa astfel de avertizări, clang va adăuga un flag separat, care nu va fi activat implicit.

În libc++, se preconizează implementarea unui mod opțional de protecție sporită, în care anumite situații care duc la comportamente nedefinite vor fi monitorizate în timpul execuției. De exemplu, în clasele std::span și std::vector va fi urmărit accesul dincolo de zona de memorie alocată, iar în cazul în care va fi detectat, programul se va închide necontrolat. Dezvoltatorii consideră că adăugarea unor astfel de modificări va menține conformitatea libc++ cu standardele C++, deoarece alegerea metodei de tratare a cazurilor de comportament nedefinit revine dezvoltatorilor bibliotecii, care pot interpreta inclusiv comportamentele nedefinite ca fiind erori, ce necesită închiderea programului.

Verificările efectuate în timpul execuției în libc++ sunt planificate să fie împărțite în categorii care pot fi activate individual. Unele dintre verificările propuse, care nu complică operațiile sau nu modifică ABI, au fost deja implementate în cadrul modului de siguranță libc++ (safe mode).

În plus, se preconizează pregătirea unui instrument pentru corectarea codului, care permite înlocuirea variabilelor cu indicii goi cu containere și aplicarea unor обработчиков alternativi în situațiile în care containerul nu poate înlocui direct indicele (de exemplu, construcția „if(array_pointer)” poate fi transformată în „if(span.data()”). Corectările pot fi aplicate nu doar variabilelor locale, ci și parametrilor de tip cu indicii.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster