Ang proyekto sa LLVM nagpalambo sa luwas nga pagdumala sa buffer sa C++

Ang mga nag-develop sa proyekto sa LLVM nagsugyot og daghang mga pagbag-o nga gitumong sa pagpalig-on sa seguridad sa mga proyekto nga kritikal sa misyon nga C++ ug paghatag usa ka paagi aron mawagtang ang mga sayup nga gipahinabo sa mga overrun sa buffer. Ang trabaho naka-focus sa duha ka mga dapit: paghatag ug development model nga nagtugot kanimo sa luwas nga pagtrabaho uban sa mga buffer, ug pagtrabaho sa pagpatig-a sa seguridad sa libc++ standard library of functions.

Ang gisugyot nga luwas nga modelo sa pagprograma alang sa C ++ mao ang paggamit sa mga klase nga gihatag sa sumbanan nga librarya kung nagtrabaho kauban ang mga buffer imbis nga magmaniobra sa mga wala’y tudlo. Pananglitan, gisugyot nga gamiton ang mga klase nga std::array, std::vector ug std::span, nga idugang sa usa ka run-time nga pagsusi alang sa wala sa mga utlanan nga gigahin nga memorya.

Aron mabatukan ang makuyaw nga mga gawi sa programming sa clang, gisugyot nga mag-isyu og mga pasidaan sa compiler alang sa tanan nga mga operasyon sa aritmetika sa pointer, susama sa mga pasidaan sa linter sa clang-tidy kung gamiton ang bandila nga "cppcoreguidelines-pro-bounds-pointer-arithmetic", suporta nga makita sa ang pagpagawas sa LLVM 16. Aron mahimo ang ingon nga mga pasidaan, usa ka bulag nga bandila ang idugang sa clang, nga dili aktibo sa default.

Giplanohan nga ipatuman ang usa ka opsyonal nga hardened protection mode sa libc++, nga, kung mahimo, makadakop sa pipila ka mga sitwasyon nga mosangpot sa dili matino nga kinaiya sa runtime. Pananglitan, sa std::span ug std::vector nga mga klase, usa ka out-of-bounds nga pag-access ang pagabantayan, diin ang programa ma-crash. Nagtuo ang mga developer nga ang pagdugang sa ingon nga mga pagbag-o magpadayon sa libc ++ nga nagsunod sa mga sumbanan sa C ++, tungod kay ang pagpili kung giunsa pagdumala ang mga kaso sa wala mahibal-an nga pamatasan naa sa mga nag-develop sa librarya, nga mahimo, taliwala sa ubang mga butang, paghubad sa dili matino nga pamatasan ingon usa ka pagkahagsa nga nanginahanglan programa sa paggawas.

Ang mga pagsusi sa runtime sa libc++ giplano nga bahinon sa mga kategorya nga mahimong iapil sa tagsa-tagsa. Ang pipila sa gisugyot nga mga pagsusi nga dili moresulta sa mas komplikado nga mga operasyon o mga pagbag-o sa ABI gipatuman na sa luwas nga paagi sa libc++.

Dugang pa, giplanohan nga mag-andam usa ka toolkit alang sa pagtul-id sa code, nga gitugotan ka nga mapulihan ang mga variable nga adunay mga hubo nga pointer sa mga sulud ug magamit ang mga alternatibong handler sa mga sitwasyon diin ang sudlanan dili direkta nga makapuli sa pointer (pananglitan, ang "kung (array_pointer)" construct mahimong makombertir sa "kon (span.data ()"). Ang mga pag-adjust mahimong magamit dili lamang sa lokal nga mga variable, apan usab sa pag-type sa mga parameter nga adunay mga pointer.

Source: opennet.ru

Idugang sa usa ka comment