It LLVM-projekt ûntwikkelet bufferfeilige ôfhanneling yn C++

De ûntwikkelders fan it LLVM-projekt hawwe in oantal wizigingen foarsteld dy't rjochte binne op it fersterkjen fan de feiligens fan missy-krityske C++-projekten en it jaan fan in middel om flaters te foarkommen dy't feroarsake binne troch oerrin fan buffers. It wurk is rjochte op twa gebieten: it leverjen fan in ûntwikkelingsmodel dat feilich wurk mei buffers mooglik makket, en wurkje om de feiligens fan 'e libc ++ standert bibleteek fan funksjes te fersterkjen.

De foarstelde feilige programmearring model foar C ++ giet it om it brûken fan klassen fersoarge troch de standert bibleteek by it wurkjen mei buffers ynstee fan manipulearjen bleate pointers. Bygelyks, it wurdt foarsteld om te brûken de std :: array, std :: vector en std :: span klassen, dat sil tafoegje in run-time kontrôle foar over-allocated ûnthâld.

Om gefaarlike programmearringpraktiken yn clang te bestriden, wurdt it foarsteld om kompilator warskôgingen te werjaan foar alle oanwizer-arithmetyske operaasjes, fergelykber mei de útfier fan clang-tidy linter warskôgings by it brûken fan de flagge "cppcoreguidelines-pro-bounds-pointer-arithmetic", dêr't stipe foar sil ferskine yn de release LLVM 16. Foar in ynskeakelje sokke warskôgings, in aparte flagge wurdt tafoege oan clang, net aktyf standert.

It is pland om in opsjonele ferbettere beskermingsmodus yn libc ++ te ymplementearjen, dy't, as ynskeakele, guon situaasjes sil fange by runtime dy't liede ta ûndefinieare gedrach. Bygelyks, yn de std :: span en std :: vector klassen, in out-of-bound ûnthâld tagong wurdt kontrolearre, en as ûntdutsen, it programma sil crashe. De ûntwikkelders leauwe dat it tafoegjen fan sokke wizigingen libc++ yn oerienstimming mei de C++-standerts hâlde sil, om't de kar foar hoe't jo gefallen fan ûndefinieare gedrach behannelje, leit by de biblioteekûntwikkelders, dy't ûnder oare ûndefinieare gedrach as in mislearring kinne behannelje, wêrtroch't de programma te beëinigjen.

Runtimekontrôles yn libc ++ binne pland om te ferdield yn kategoryen dy't yndividueel kinne wurde ynskeakele. Guon fan 'e foarstelde kontrôles, dy't net liede ta kompleksiteit fan operaasjes of feroarings oan' e ABI, binne al ymplementearre binnen de libc ++ feilige modus.

Derneist is it pland om ark foar it oanpassen fan de koade te meitsjen, wêrtroch jo fariabelen kinne ferfange troch bleate oanwizers mei konteners en alternative handlers brûke yn situaasjes wêr't de kontener de oanwizer net direkt kin ferfange (bygelyks it "if(array_pointer)"-konstruksje kin wurde omboud ta "if(span.data) ()"). Oanpassings kinne tapast wurde net allinnich op lokale fariabelen, mar ek oan parameters fan oanwizer typen.

Boarne: opennet.ru

Add a comment