เบชเบฐเบšเบฑเบšเบ—เบตเบชเบตเปˆเบ‚เบญเบ‡ patches เบชเปเบฒเบฅเบฑเบš Linux kernel เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฒเบชเบฒ Rust

Miguel Ojeda, เบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ Rust-for-Linux, เบชเบฐเป€เบซเบ™เบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบชเบตเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเบญเบธเบ›เบฐเบเบญเบ™เปƒเบ™เบžเบฒเบชเบฒ Rust เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ”เบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Linux kernel. เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Rust เป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡, เปเบ•เปˆเป„เบ”เป‰เบ•เบปเบเบฅเบปเบ‡เบเบฑเบ™เปเบฅเป‰เบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบชเบฒเบ‚เบฒเบ•เปเปˆเป„เบ›เบ‚เบญเบ‡ linux เปเบฅเบฐเป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบซเบเปˆเบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบŠเบฑเป‰เบ™ abstraction เป€เบ—เบดเบ‡เบฅเบฐเบšเบปเบšเบเปˆเบญเบเบ‚เบญเบ‡ kernel, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป„เบ”เป€เบงเบตเปเบฅเบฐเป‚เบกเบ”เบนเบ™. เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบถเบ™เบˆเบฒเบ Google เปเบฅเบฐ ISRG (เบเบธเปˆเบกเบ„เบปเป‰เบ™เบ„เป‰เบงเบฒเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”), เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบœเบนเป‰เบเปเปˆเบ•เบฑเป‰เบ‡เป‚เบ„เบ‡เบเบฒเบ™ Let's Encrypt เปเบฅเบฐเบชเบปเปˆเบ‡เป€เบชเบตเบก HTTPS เปเบฅเบฐเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”.

เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ Rust เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ—เบตเบชเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเปเบฅเบฐเป‚เบกเบ”เบนเบ™ kernel. เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Rust เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰ Rust เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš kernel. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Rust เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เบปเบ™เบ‚เบฑเบšเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เป„เบ”เป€เบงเบตเบ—เบตเปˆเบ›เบญเบ”เป„เบžเปเบฅเบฐเบ”เบตเบเบงเปˆเบฒเบ”เป‰เบงเบเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”, เป‚เบ”เบเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบง, เบเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบ•เบปเบงเบŠเบตเป‰ null, เปเบฅเบฐ buffer overruns.

Rust เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เป€เบงเบฅเบฒเบฅเบงเบšเบฅเบงเบกเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡, เบเบฒเบ™เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเปเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ•เบฐเบซเบผเบญเบ”เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ (เบ‚เบญเบšเป€เบ‚เบ”), เปเบฅเบฐเป‚เบ”เบเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™. Rust เบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™ overflows integer, เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบ„เปˆเบฒเบ•เบปเบงเปเบ›เป„เบ”เป‰เบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰, เบกเบตเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปƒเบŠเป‰เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ—เบตเปˆเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบฅเบฐเบ•เบปเบงเปเบ›เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบฅเบฐเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบžเบดเบกเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™.

เบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเบ‚เบญเบ‡ patches เบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเบฅเบปเบšเบฅเป‰เบฒเบ‡เบ„เปเบฒเป€เบซเบฑเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบ—เปเบฒเบญเบดเบ”, เบ—เบตเบชเบญเบ‡เปเบฅเบฐเบ—เบตเบชเบฒเบกเบ‚เบญเบ‡ patches. เปƒเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹:

  • เบเบฒเบ™เบซเบฑเบ™เป„เบ›เบชเบนเปˆเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ›เปˆเบญเบเบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ‚เบญเบ‡ Rust 1.58.0 เป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบฎเบฑเบ”. เปƒเบ™เบšเบฑเบ™เบ”เบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบท Rust เบ•เบปเป‰เบ™เบ•เป, เบ—เบธเบ‡ โ€œ-Zsymbol-mangling-version=v0โ€ (เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบขเบนเปˆเปƒเบ™ Rust 1.59.0) เปเบฅเบฐเบฎเบนเบšเปเบšเบš โ€œmaybe_uninit_extraโ€ (เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบขเบนเปˆเปƒเบ™ Rust 1.60.0. .XNUMX) เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™..
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบกเบตเป€เบ„เบทเปˆเบญเบ‡เบกเบท Rust เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเปเบฅเบฐเบ‚เบฐเบซเบเบฒเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Rust เปƒเบ™เบฅเบฐเบšเบปเบš.
  • เบšเบปเบ”เบ„เบฑเบ”เบซเบเปเป‰เปƒเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เปœเบตเปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเบงเบฅเบฐเบšเบธเบญเบธเบ›เบฐเบเบญเบ™ (โ€œIdArrayโ€ เปเบฅเบฐ โ€œIdTableโ€) เบˆเบฒเบเบฅเบฐเบซเบฑเบ” Rust.
  • เป€เบžเบตเปˆเบกเบŠเบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป‚เบกเบ‡เบˆเบฑเบšเป€เบงเบฅเบฒ (เบเบญเบšเป‚เบกเบ‡).
  • เป„เบ”เป€เบงเบตเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบกเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฑเบเบชเบฐเบ™เบฐ.
  • เบกเบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบกเบฐเบซเบฒเบžเบฒเบเปƒเปเปˆเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป„เบ”เป€เบงเบตเบ‚เบญเบ‡เปเบžเบฅเบ”เบŸเบญเบกเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™, เปเบฅเบฐเป„เบ”เป‰เบกเบตเบเบฒเบ™เบชเบฐเป€เปœเบตเปเบกเปˆเปเบšเบšเป„เบ”เป€เบงเบตเบ—เบปเปˆเบงเป„เบ›เปƒเปเปˆ.
  • เป€เบžเบตเปˆเบกเบกเบฒเป‚เบ„เบชเบณเบฅเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡ "dev_*".
  • เป€เบžเบตเปˆเบกเบงเบดเบ—เบตเบเบฒเบ™ "{read,write}*_relaxed" เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ” IoMem.
  • เป€เบญเบปเบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ” FileOpener เบญเบญเบเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบŸเบฅเปŒเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™.
  • เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต "เป‚เบกเบ”เบนเบ™เบ™เบตเป‰" เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เป€เบกเบทเปˆเบญเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ„เบปเบ™เบ‚เบฑเบš.
  • เปเบกเปˆเปเบšเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบกเบ”เบนเบ™ kernel เปƒเบ™เบžเบฒเบชเบฒ Rust เปเบกเปˆเบ™เบชเบฐเป€เบซเบ™เบต.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™