Vrijgave van de programmeertaal Rust 1.74. RustVMM-audit. Binder herschrijven in roest

De release van de algemene programmeertaal Rust 1.74, opgericht door het Mozilla-project, maar nu ontwikkeld onder auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. De taal is gericht op geheugenveiligheid en biedt de middelen om een ​​hoog parallellisme te bereiken bij het uitvoeren van taken, terwijl het gebruik van een garbage collector en runtime wordt vermeden (runtime wordt beperkt tot basisinitialisatie en onderhoud van de standaardbibliotheek).

De geheugenbeheertechnieken van Rust bevrijden de ontwikkelaar van pointermanipulatiefouten en beschermen tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free toegang, null pointer-dereferenties, bufferoverruns en dergelijke. Om bibliotheken te distribueren, de assemblage te garanderen en afhankelijkheden te beheren, ontwikkelt het project de Cargo-pakketbeheerder. De kratten.io-repository wordt ondersteund voor het hosten van bibliotheken.

Geheugenveiligheid wordt in Rust afgedwongen tijdens het compileren door middel van referentiecontrole, het volgen van objecteigendom, overweging van de levensduur van objecten (scoping) en evaluatie van geheugentoegang tijdens runtime. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.

Belangrijkste innovaties:

  • De mogelijkheid toegevoegd om lintcontroles te configureren via het Cargo.toml-bestand met het pakketbeheerdermanifest. Om lintinstellingen te definiëren, zoals het reactieniveau (verbieden, weigeren, waarschuwen, toestaan), worden nieuwe secties “[lints]” en “[workspace.lints]” voorgesteld, waarbij met wijzigingen rekening wordt gehouden bij het nemen van een beslissing over wederopbouw. In plaats van bijvoorbeeld de vlaggen “-F”, “-D”, “-W” en “-A” op te geven bij het samenstellen of toevoegen van de “#![forbid(unsafe_code)]” en “#![deny(clippy) :” attributen aan de code) :enum_glob_use)]" kan nu worden gebruikt in het vrachtmanifest: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
  • De Crate-pakketbeheerder heeft de mogelijkheid toegevoegd om te authenticeren bij verbinding met een repository. Het basispakket bevat ondersteuning voor het plaatsen van authenticatieparameters in Linux-credentialstores (gebaseerd op libsecret), macOS (Keychain) en Windows (Windows Credential Manager), maar het systeem is in eerste instantie modulair gemaakt en stelt u in staat om het werk met verschillende providers te organiseren voor het opslaan en het genereren van tokens, er is bijvoorbeeld een plug-in voorbereid voor het gebruik van de 1Password-wachtwoordbeheerder. Authenticatie kan door de repository voor elke bewerking vereist zijn, niet alleen om te bevestigen dat pakketten zijn gepubliceerd. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Ondersteuning voor projecties van het retourtype (impl_trait_projections) is gestabiliseerd, waardoor Self en T::Assoc kunnen worden vermeld in retourtypen zoals "async fn" en "->impl Trait". struct Wrapper<'a, T>(&'a T); // Ondoorzichtige retourneringstypen die `Self` vermelden: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } eigenschap eigenschap <'a> { type Assoc; fn new() -> Zelf::Assoc; } impl Eigenschap<'_> voor () {type Assoc = (); fn new() {} } // Ondoorzichtige retourtypen die een bijbehorend type vermelden: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
  • Het attribuut “const”, dat de mogelijkheid bepaalt om het in elke context te gebruiken in plaats van constanten, wordt gebruikt in de functies:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Verzadigend
    • impl Van voor std::process::Stdio
    • impl Van voor std::process::Stdio
    • impl Van voor std::process::Child{Stdin, Stdout, Stderr}
    • impl Van voor std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Fout::andere
    • impl TryFrom voor u16
    • impl Van<&[T; N]>voor Vec
    • impl Van<&mut [T; N]>voor Vec
    • impl Van<[T; N]> voor Boog<[T]>
    • impl Van<[T; N]> voor Rc<[T]>
  • De compiler, toolkit, standaardbibliotheek en gegenereerde uitvoerbare programma's stellen hogere eisen aan Apple-platforms, waarvoor nu minimaal macOS 10.12 Sierra, iOS 10 en tvOS 10, uitgebracht in 2016, vereist zijn.
  • Het derde ondersteuningsniveau is geïmplementeerd voor het i686-pc-windows-gnullvm-platform. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen, het publiceren van officiële builds of het controleren of de code kan worden gebouwd.
  • Het tweede ondersteuningsniveau voor het doelplatform loongarch64-unknown-none is geïmplementeerd. Het tweede niveau van ondersteuning betreft een montagegarantie.

Bovendien kunnen twee gebeurtenissen met betrekking tot de Rust-taal worden opgemerkt:

  • Het OSTIF (Open Source Technology Improvement Fund), opgericht om de veiligheid van open source-projecten te versterken, heeft de resultaten gepubliceerd van een audit van het RustVMM-project, dat componenten levert voor het creëren van taakspecifieke hypervisors en virtuele machinemonitors (VMM's). Bedrijven als Intel, Alibaba, Amazon, Google, Linaro en Red Hat nemen deel aan de ontwikkeling van het project. Intel Cloud Hypervisor en Dragonball hypervisors worden ontwikkeld op basis van RustVMM. De audit bevestigde de hoge kwaliteit van de codebasis en het gebruik van technieken in de architectuur en implementatie gericht op het bereiken van maximale veiligheid. Tijdens de audit werden 6 problemen geïdentificeerd die geen directe impact hadden op de veiligheid.
  • Google introduceerde een nieuwe implementatie van het Binder-communicatiemechanisme tussen processen, herschreven in de Rust-taal, op de mailinglijst voor Linux-kernelontwikkelaars. De herwerking werd uitgevoerd als onderdeel van een project om de beveiliging te versterken, veilige programmeertechnieken te bevorderen en de efficiëntie van het identificeren van problemen bij het werken met geheugen in Android te vergroten (ongeveer 70% van alle gevaarlijke kwetsbaarheden die in Android worden geïdentificeerd, worden veroorzaakt door fouten bij het werken met geheugen ). De implementatie van Binder in Rust heeft qua functionaliteit gelijkheid bereikt met de originele versie in de C-taal, slaagt voor alle AOSP-tests (Android Open-Source Project) en kan worden gebruikt om werkende edities van firmware te maken. De performance van beide implementaties ligt ongeveer op hetzelfde niveau (afwijkingen binnen -1.96% en +1.38%).

Bron: opennet.ru

Voeg een reactie