Mofuta oa botšelela oa li-patches bakeng sa kernel ea Linux ka tšehetso bakeng sa puo ea Rust

Miguel Ojeda, sengoli sa projeke ea Rust-for-Linux, o khothalelitse tokollo ea likarolo tsa v6 bakeng sa ho nts'etsapele bakhanni ba lisebelisoa ka puo ea Rust bakeng sa ho hlahlojoa ke baetsi ba Linux kernel. Ena ke khatiso ea bosupa ea li-patches, ho nahanoa ka phetolelo ea pele, e hatisitsoeng ntle le nomoro ea phetolelo. Ts'ehetso ea mafome e nkoa e le liteko, empa e se e kenyelelitsoe lekaleng le latelang la linux 'me e ntlafalitse ka ho lekaneng ho qala mosebetsi oa ho theha likarolo tse fokolang holim'a li-subsystems tsa kernel, hammoho le ho ngola bakhanni le li-module. Ntlafatso ena e tšehelitsoe ka lichelete ke Google le ISRG (Internet Security Research Group), e leng mothehi oa morero oa Let's Encrypt le ho khothaletsa HTTPS le nts'etsopele ea mahlale a ho ntlafatsa ts'ireletso ea Marang-rang.

Khatisong e ncha:

  • Setsi sa lithulusi le mefuta e fapaneng ea laebrari ea alloc, e lokolotsoeng ho tsoa molokong o ka bang teng oa "ho tšoha" ha liphoso li etsahala, li ntlafalitsoe ho lokolloa ha Rust 1.60, e tsitsitseng ts'ehetso ea "mohlomong_uninit_extra" e sebelisoang lipacheng tsa kernel.
  • E ekelitse bokhoni ba ho etsa liteko ho tsoa litokomaneng (liteko tse sebelisoang hape e le mehlala litokomaneng), ka phetoho ea nako ea tlhahlobo ea liteko tse tlamelletsoeng ho kernel API ho liteko tsa KUnit tse entsoeng nakong ea ho kenya kernel.
  • Litlhokahalo li amohetsoe hore liteko ha lia lokela ho hlahisa temoso ea Clippy linter, joalo ka khoutu ea Rust kernel.
  • Ho hlahisoa ts'ebetsong ea pele ea "net" module e nang le mesebetsi ea marang-rang. Rust code e na le phihlello ea meaho ea marang-rang ea kernel joalo ka Namespace (e ipapisitseng le sebopeho sa kernel net), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 ( struct sockaddr_in equints) .
  • Ho na le ts'ehetso ea pele ea mekhoa ea asynchronous programming (async), e sebelisoang ka mokhoa oa kasync module. Ka mohlala, o ka ngola khoutu ea asynchronous ho laola li-sockets tsa TCP: async fn echo_server(stream: TcpStream) -> Sephetho {let mut buf = [0u8; 1024]; loop {let n = stream.bala(&mut buf).e emetse?; haeba n == 0 {kgutlisetsa Ok(()); } stream.ngola_tsohle(&buf[..n]).e emetse?; }}
  • Letlooa le ekelitsoeng :: module ea filthara bakeng sa ho qhekella li-filters tsa pakete ea marang-rang. Mohlala o kentsoeng rust_netfilter.rs o nang le ts'ebetso ea sefe ka puo ea Rust.
  • Kenyelletso e kenyellelitsoeng ea mutex smutex e bonolo::Mutex, e sa hlokeng pinning.
  • E kenyellelitsoe NoWaitLock, e sa emeng ho notleloa, 'me haeba e hapiloe ke khoele e' ngoe, e baka phoso e tla tlalehoa ha ho leka ho fumana senotlolo ho fapana le ho emisa moletsi.
  • E kentse RawSpinLock, e khetholloang ke raw_spinlock_t ka har'a kernel, ho sebetsa likarolong tse ke keng tsa sebetsa.
  • E kentse mofuta oa ARef bakeng sa litšupiso tsa ntho eo mokhoa oa ho bala litšupiso o sebelisoang ho eona (e lula e phetoa hape).
  • Rustc_codegen_gcc backend, e u lumellang hore u sebelise laebrari ea libgccjit ho tsoa morerong oa GCC e le jenereithara ea khoutu ho rustc ho fana ka rustc ka ts'ehetso ea meralo ea meralo le lintlafatso tse fumanehang ho GCC, e kentse tšebetsong bokhoni ba ho qala komporo ea rustc. Phatlalatso ea compiler e bolela bokhoni ba ho sebelisa jenereithara ea khoutu e thehiloeng ho GCC ho rustc ho haha ​​​​rustc compiler ka boeona. Ho feta moo, tokollo ea morao-rao ea GCC 12.1 e kenyelletsa litokiso ho libgccjit tse hlokahalang hore rustc_codegen_gcc e sebetse ka nepo. Litokisetso li ntse li tsoela pele ho fana ka bokhoni ba ho kenya rustc_codegen_gcc ho sebelisa sesebelisoa sa rustup.
  • Kgatelopele ya ntshetsopele ya GCC frontend gccrs ka ho kenngwa tshebetsong ha mokopanyi wa puo ya Rust e itshetlehileng hodima GCC e hlokometswe. Hajoale ho na le bahlahisi ba babeli ba nako e tletseng ba sebetsang ho gccrs.

Hopola hore liphetoho tse reriloeng li etsa hore ho khonehe ho sebelisa Rust e le puo ea bobeli bakeng sa ho ntlafatsa bakhanni le li-module tsa kernel. Tšehetso ea mafome e hlahisoa e le khetho e sa sebetseng ka ho sa feleng 'me e sa etse hore Rust e kenyelelitsoe e le ho itšetleha ho hlokahalang bakeng sa kernel. Ho sebelisa Rust bakeng sa nts'etsopele ea mokhanni ho tla u lumella ho theha bakhanni ba sireletsehileng le ba betere ka boikitlaetso bo fokolang, ntle le mathata a joalo ka phihlello ea mohopolo ka mor'a ho lokolla, li-null pointer dereferences, le buffer overruns.

Ho sebetsa ka mokhoa o sireletsehileng oa memori ho fanoa ka Rust ka nako ea ho bokella ka ho hlahloba litšupiso, ho boloka tlaleho ea botho ba ntho le nako ea bophelo ba ntho (scope), hammoho le ka tlhahlobo ea ho nepahala ha phihlello ea mohopolo nakong ea ts'ebetso ea khoutu. Rust e boetse e fana ka ts'ireletso khahlano le phallo e felletseng, e hloka ho qalisoa ha boleng bo fapaneng pele e sebelisoa, e sebetsana le liphoso hantle laeboraring e tloaelehileng, e sebelisa mohopolo oa litšupiso tse ke keng tsa fetoha le tse fapaneng ka mokhoa o ikhethileng, e fana ka ho thaepa ho tiileng ho fokotsa liphoso tse utloahalang.

Source: opennet.ru

Eketsa ka tlhaloso