LLVM izstrādātāji piedāvā drošu bufera apstrādi C++

LLVM logotips

LLVM ir ietvars kompilatoru izstrādei, kā arī palīdz veidot jaunas programmēšanas valodas un uzlabot esošās valodas.

L LLVM projekta izstrādātāji piedāvāja vairākas izmaiņas, kas vērstas uz drošības stiprināšanu no projektiem C + + kritiski svarīgiem uzdevumiem un nodrošināt līdzekļus, lai novērstu bufera pārtēriņa izraisītās kļūdas.

Tādējādi viņu publicētais priekšlikums ir īpaši vērsts uz darbu divās jomās: izstrādes modeļa nodrošināšana, kas ļauj droši strādāt ar buferiem, un darbs, lai stiprinātu libc++ standarta funkciju bibliotēkas drošību.

Tiek minēts, ka piedāvātais drošās programmēšanas modelis priekš C++ «ir izmantot standarta bibliotēkas nodrošinātās klases, strādājot ar buferiem, nevis manipulējot ar neapstrādātām norādēm». Piemēram, tiek piedāvāts izmantot klases std::masīvs, std::vector un std::span, kuras tiks pievienotas ar izpildlaika pārbaudi, lai atrastu ārpus robežām piešķirtās atmiņas.

Mūsu mērķis ir uzlabot kritisko C++ kodu bāzu drošību. Šim nolūkam mēs plānojam strādāt pie divām idejām.

Sacietināta C++ standarta bibliotēka
C++ drošā bufera programmēšanas modelis un pieņemšanas rīki
Sacietinātais libc++ ir paredzēts, lai C++ standarta bibliotēkas saskarnes kopumā padarītu drošākas.

C++ drošā bufera programmēšanas modelis kopā ar rūdīto libc++ nodrošina neierobežotas atmiņas piekļuves izpildlaika mazināšanu. Pieņemšanas rīki automatizēs koda migrāciju uz šo jauno programmēšanas modeli.

Papildus tam tas arī piemin apkarot "bīstamu" programmēšanas praksi zvana, ja ierosina izdot kompilatora brīdinājumus par visām rādītāja aritmētiskajām darbībām, līdzīgi kā clang-tidy linter brīdinājumi, izmantojot karogu "cppcoreguidelines-pro-bounds-pointer-aritmētika", kura atbalsts būs redzams LLVM 16. Lai iespējotu šādus brīdinājumus, clang tiks pievienots atsevišķs karodziņš, kas pēc noklusējuma ir neaktīvs. .

Plānots ieviest papildu aizsardzības režīmu libc++, kas, ja tas ir iespējots, atklās dažas situācijas, kas izpildlaikā noved pie nedefinētas darbības. Piemēram, nodarbībās std::span un std::vector, tiks uzraudzīta piekļuve ārpus robežām, un tādā gadījumā programma neizdosies.

Šīs papildu izpildlaika pārbaudes tiks sagrupētas vairākās kategorijās, kuras var kontrolēt atsevišķi. Nolūks ir tāds, ka pārdevējs, kas savā platformā piegādā libc++, var izlemt, kuras pārbaudes iespējot piegādes bibliotēkā (ja tādas ir), atkarībā no vēlamā drošības līmeņa.

Izstrādātāji uzskata, ka šādu izmaiņu pievienošana saglabās libc++ saderību ar C++ standartiem, jo ​​izvēle, kā rīkoties nedefinētas uzvedības gadījumos, ir bibliotēkas izstrādātāju ziņā, kuri, cita starpā, var uzskatīt nedefinētu darbību kā bloķēšanu, kas prasa, lai programma Izeja.

the izpildlaika pārbaudes programmā libc++ plānots iedalīt kategorijās ko var iekļaut atsevišķi. Dažas no ieteiktajām pārbaudēm, kas neizraisa sarežģītākas darbības vai ABI izmaiņas, jau ir ieviestas libc++ drošajā režīmā (drošais režīms).

Atkārtoti uzsveru, ka galvenais mērķis ir nodrošināt, lai nosūtītā bibliotēka varētu veikt šīs pārbaudes ražošanā; šī nav funkcija "tikai atkļūdošana", lai gan galu galā tā aizstās ilgi bojāto "atkļūdošanas režīmu".

Turklāt, plānots sagatavot koda korekcijas rīku komplektu kas ļaus konteineros aizstāt mainīgos ar neapstrādātiem rādītājiem un lietot alternatīvus apdarinātājus situācijās, kad konteiners nevar tieši aizstāt rādītāju (piemēram, konstrukciju "if(masīva_rādītājs)" var pārvērst par "if(span.data ( )»).Iestatījumus var pielietot ne tikai lokālajiem mainīgajiem, bet arī tipa parametriem ar rādītājiem.

Tiek arī minēts, ka apsver iespēju izveidot zvana statisko analizatoru pārbaudītāju maršruts jutīgs, kas brīdina, ja std::span ir izgatavots no konteinera, kas ir mazāks par izmēru, kas norādīts laiduma konstruktorā. Minētais pārbaudītājs ir autonoms un noderīgs pats par sevi, ja viss iet labi, tas pēc noklusējuma tiks iespējots visiem lietotājiem

Beidzot ja jūs interesē uzzināt vairāk par to, sīkāku informāciju varat pārbaudīt šī saite.


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: AB Internet Networks 2008 SL
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.