LLVM-projektet utvecklar verktyg för sÀker bufferthantering i C++

LLVM-projektgruppen har föreslagit en rad förÀndringar för att förbÀttra sÀkerheten för verksamhetskritiska C++-projekt och tillhandahÄlla verktyg för att förhindra buffer-out-of-bounds-fel. Arbetet fokuserar pÄ tvÄ omrÄden: att tillhandahÄlla en utvecklingsmodell som möjliggör sÀker anvÀndning av buffertar, och att arbeta med att stÀrka standardbiblioteket med libc++-funktioner.

Den föreslagna modellen för sÀker programmering för C++ förutsÀtter anvÀndning av klasser som tillhandahÄlls av standardbiblioteket nÀr man arbetar med buffertar istÀllet för att manipulera bara pekare. Till exempel föreslÄs det att man anvÀnder klasserna std::array, std::vector och std::span, till vilka en kontroll för att överskrida de allokerade minnesgrÀnserna kommer att lÀggas till, utförd vid körning.

För att bekÀmpa farliga programmeringsmetoder föreslÄr clang att kompilatorvarningar ska matas ut för alla pekararitmetiska operationer, liknande de clang-tidy linter-varningar som matas ut nÀr flaggan "cppcoreguidelines-pro-bounds-pointer-arithmetic" anvÀnds, vilken kommer att stödjas i LLVM 16. En separat flagga, som inte Àr aktiverad som standard, kommer att lÀggas till i clang för att aktivera sÄdana varningar.

Libc++ planerar att implementera ett valfritt utökat skyddslÀge, vilket, nÀr det Àr aktiverat, kommer att upptÀcka vissa situationer under körning som leder till odefinierat beteende. Till exempel, i klasserna std::span och std::vector, kommer Ätkomst bortom det allokerade minnesomrÄdet att spÄras, och om det upptÀcks kommer programmet att avslutas onormalt. Utvecklarna tror att sÄdana Àndringar kommer att hÄlla libc++ kompatibel med C++-standarder, eftersom valet av hur man hanterar fall av odefinierat beteende Àr upp till biblioteksutvecklarna, som bland annat kan tolka odefinierat beteende som ett fel som krÀver att programmet avslutas.

Runtime-kontrollerna i libc++ Àr planerade att delas in i kategorier som kan aktiveras individuellt. NÄgra av de föreslagna kontrollerna som inte komplicerar operationer eller Àndrar ABI Àr redan implementerade i libc++ felsÀkert lÀge.

Dessutom planeras det att förbereda en verktygslÄda för kodkorrigering, som gör det möjligt att ersÀtta variabler med bara pekare till containrar och att tillÀmpa alternativa hanterare i situationer dÀr containern inte direkt kan ersÀtta pekaren (till exempel kan konstruktionen "if(array_pointer)" omvandlas till "if(span.data()")). Korrigeringar kan tillÀmpas inte bara pÄ lokala variabler, utan Àven pÄ parametrar av typer med pekare.

KĂ€lla: opennet.ru

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster