LLVM-kehittäjät ehdottavat turvallista puskurinkäsittelyä C++:ssa

LLVM logo

LLVM on kehys kääntäjien kehittämiseen sekä uusien ohjelmointikielien rakentamiseen ja olemassa olevien kielten parantamiseen.

Los LLVM-projektin kehittäjät ehdottivat useita turvallisuuden vahvistamiseen tähtääviä muutoksia hankkeista C + + toiminnan kannalta kriittistä ja tarjota keino eliminoida puskurin ylitysten aiheuttamat virheet.

Sellaisenaan heidän julkaisemansa ehdotus keskittyy työhön erityisesti kahdella alueella: puskureiden turvallisen työskentelyn mahdollistavan kehitysmallin tarjoaminen ja libc++-standardin funktiokirjaston turvallisuuden vahvistaminen.

Mainitaan, että ehdotettu suojattu ohjelmointimalli C++:lle «on käyttää vakiokirjaston tarjoamia luokkia puskureiden kanssa työskennellessä sen sijaan, että käsittelet raakaosoittimia». Esimerkiksi ehdotetaan käytettäväksi luokkia std::array, std::vector ja std::span, jotka lisätään ajonaikaiseen tarkistukseen rajojen ulkopuolella varatun muistin varalta.

Tavoitteenamme on parantaa kriittisten C++-koodikantojen turvallisuutta. Tätä varten aiomme työstää kahta ideaa.

Karkaistu C++ -standardikirjasto
C++ Safe Buffer -ohjelmointimalli ja käyttöönottotyökalut
Karkaistu libc++ on tarkoitettu tekemään C++-standardin mukaisista kirjastoliittymistä yleisesti ottaen turvallisempia.

C++:n turvallinen puskuriohjelmointimalli yhdessä karkaistujen libc++:n kanssa tarjoavat ajonaikaisen lievennyksen rajojen ulkopuoliselle muistille. Käyttöönottotyökalut automatisoivat koodin siirron tähän uuteen ohjelmointimalliin.

Tämän lisäksi siinä mainitaan myös se "vaarallisten" ohjelmointikäytäntöjen torjuntaan kilisessä, jos ehdottaa kääntäjävaroituksia kaikille osoittimen aritmeettisille operaatioille, joka on samankaltainen kuin siivoavia linterivaroituksia käytettäessä "cppcoreguidelines-pro-bounds-pointer-aritmetic" -lippua, jonka tuki näkyy LLVM 16:ssa. Tällaisten varoitusten mahdollistamiseksi lisätään erillinen lippu, joka on oletusarvoisesti ei-aktiivinen. .

Libc++:ssa on tarkoitus toteuttaa valinnainen suojaustila, joka, kun se on käytössä, havaitsee tilanteita, jotka johtavat määrittelemättömään toimintaan suorituksen aikana. Esimerkiksi luokissa std::span ja std::vektori, rajojen ulkopuolista pääsyä valvotaan, jolloin ohjelma epäonnistuu.

Nämä ylimääräiset ajonaikaiset tarkistukset ryhmitellään useisiin luokkiin, joita voidaan hallita erikseen. Tarkoituksena on, että libc++:aa omalla alustallaan toimittava toimittaja voi päättää, mitkä tarkistukset otetaan käyttöön toimituskirjastossa (jos sellaisia ​​on) halutun suojaustason mukaan.

Kehittäjät uskovat, että tällaisten muutosten lisääminen pitää libc++:n C++-standardien mukaisena, koska määrittelemättömän toiminnan tapausten käsittelyn valinta on kirjaston kehittäjillä, jotka voivat muun muassa käsitellä määrittelemätöntä toimintaa lukona, joka vaatii ohjelman poistu.

Las ajonaikaiset tarkistukset libc++:ssa on tarkoitus jakaa luokkiin jotka voidaan sisällyttää yksitellen. Jotkut ehdotetuista tarkistuksista, jotka eivät johda monimutkaisempiin toimintoihin tai ABI-muutoksiin, on jo toteutettu libc++:n vikasietotilassa (safe mode).

Toistan, perimmäisenä tavoitteena on, että lähetetty kirjasto mahdollistaa nämä tarkistukset tuotannossa; tämä ei ole "vain debug"-ominaisuus, vaikka se lopulta korvaa pitkään katkenneen "debug mode".

Lisäksi, on tarkoitus valmistella joukko koodinkorjaustyökaluja joka mahdollistaa muuttujien korvaamisen raakaosoittimilla säilöissä ja vaihtoehtoisten käsittelijöiden käyttämisen tilanteissa, joissa säilö ei voi suoraan korvata osoitinta (esimerkiksi "if(array_pointer)" -rakenne voidaan muuntaa muotoon "if(span.data ( )»). Asetuksia voidaan soveltaa paikallisten muuttujien lisäksi myös osoitinparametreihin.

Se mainitaan myös harkitsevat "staattisen analysaattorin kilisemistä" reittiherkkä, joka varoittaa jos std::span on rakennettu säiliöstä, joka on pienempi kuin jänteen konstruktorissa määritetty koko. Mainittu tarkistus on itsenäinen ja hyödyllinen yksinään, jos kaikki menee hyvin, se on oletusarvoisesti käytössä kaikille käyttäjille

Vihdoin jos olet kiinnostunut tietämään siitä lisää, voit tarkistaa yksityiskohdat seuraava linkki.


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastaa tiedoista: AB Internet Networks 2008 SL
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.