Yechishanu edition yezvigamba zveLinux kernel nerutsigiro rweRust mutauro

Miguel Ojeda, munyori wepurojekiti yeRust-for-Linux, akakurudzira vhezheni yechishanu yezvikamu zvekugadzira madhiraivha emidziyo mumutauro weRust kuti atariswe nevagadziri veLinux kernel. Rutsigiro rwerust inoonekwa seyekuyedza, asi yakatoverengerwa mulinux-rinotevera bazi uye yakagadziridzwa zvakakwana kuti itange basa rekugadzira abstraction layers pamusoro pekernel subsystems, pamwe nekunyora madhiraivha nemamodule. Kuvandudza uku kunotsigirwa neGoogle neISRG (Internet Security Research Group), inova muvambi weLet Encrypt project uye inosimudzira HTTPS nekuvandudzwa kwetekinoroji yekuvandudza kuchengetedzwa kweInternet.

Rangarira kuti shanduko dzakarongwa dzinoita kuti zvikwanise kushandisa Rust semutauro wechipiri pakuvandudza vatyairi uye kernel module. Rutsigiro rutsigiro runounzwa sechisarudzo chisingagoneswe nekukasira uye hachikonzereri kuti Rust ibatanidzwe sechinhu chinodiwa kuvaka kutsamira kune kernel. Kushandisa Rust yekusimudzira mutyairi kuchakubvumidza kuti ugadzire vatyairi vakachengeteka uye vari nani nekuedza kushoma, vasina matambudziko akadai sekuwana ndangariro mushure mekusunungura, null pointer dereferences, uye buffer overruns.

Memory-yakachengeteka kubata inopihwa muRust panguva yekuunganidza kuburikidza nekutarisa referensi, kuchengeta track yemuridzi wechinhu uye chinhu hupenyu hwese (chiyero), pamwe nekuongororwa kwekururama kwekuyeuka kwekuwana panguva yekodhi kodhi. Ngura inopawo dziviriro kubva pahuwandu hwekufashukira, inoda kusungirirwa kwekutanga kwemhando dzakasiyana usati washandiswa, inobata zvikanganiso zviri nani muraibhurari yakajairwa, inoshandisa iyo pfungwa yezvisingachinjiki mareferensi uye zvinosiyana nekusarudzika, inopa yakasimba static typing kuderedza zvikanganiso zvine musoro.

Iyo itsva vhezheni yezvigamba inoramba ichibvisa zvirevo zvakaitwa panguva yekukurukurirana kwekutanga, yechipiri, yechitatu uye yechina editions yezvigamba. Mushanduro itsva:

  • Kuyedzwa kwechikamu cherutsigiro rweRust kwakawedzerwa kune inoenderera yekubatanidza sisitimu yakavakirwa paIntel-inotsigirwa 0DAY/LKP bot uye kuburitswa kwemishumo yekuyedza kwatanga. Tiri kugadzirira kubatanidza Rust rutsigiro muKernelCI otomatiki yekuyedza system. Kuedzwa kwakavakirwa paGitHub CI kwaendeswa kune kushandiswa kwemidziyo.
  • Rust kernel modules inosunungurwa kubva pakudiwa kwekutsanangura hunhu hwe crate "#![no_std]" uye "#![feature(...)]".
  • Yakawedzerwa tsigiro yezvinangwa zvegungano rimwechete (.o, .s, .ll uye .i).
  • Mitemo yekodhi inotsanangura mitemo yekuparadzanisa makomendi ("//") uye kunyora kodhi ("///").
  • Iyo is_rust_module.sh script yakagadziridzwa zvakare.
  • Yakawedzerwa tsigiro ye static (yepasi rose yakagovaniswa shanduko) kuwiriranisa primitives zvichibva pane "CONFIG_CONSTRUCTORS" kuita.
  • Kukiya manejimendi kwakarerutswa: Guard uye GuardMut akasanganiswa uye imwe parameterized mhando.
  • Zvinokwanisika kutsanangura mamwe ma parameters paunenge uchinyoresa zvishandiso.
  • Yakawedzera iyo "RwSemaphore" abstraction, iyo inoita seyakaputira pamusoro peiyo rw_semaphore C chimiro.
  • Kushandisa mmap, itsva mm module uye VMA abstraction yakawedzerwa (yakapetwa pamusoro peiyo vm_area_struct chimiro).
  • Mutyairi weGPIO PL061 achinjirwa kushandisa "dev_*!" macro.
  • Kucheneswa kwakazara kwekodhi kwakaitwa.

Source: opennet.ru

Voeg