
Rust-ის soundness ხარვეზი: კოდი ფილდის მინიჭებით 'static სიცოცხლის საზღვრებს გვერდს უვლის
ახლად დაფიქსირებული Rust-ის პრობლემა აჩვენებს, რომ კოვარიანტული ფილდის მინიჭება არღვევს სტრუქტურის 'static სიცოცხლის შეზღუდვას და Drop-ის კოდს საშუალებას აძლევს, ხანმოკლე რეფერენსები static-ად მიიჩნიოს და წაშლილი მეხსიერება წაიკითხოს.
ხარვეზი
Rust-ის ტიპების სისტემაში არსებული soundness ხვრელი კოდს საშუალებას აძლევს, კოვარიანტული ფილდის მინიჭებით გვერდი აუაროს სტრუქტურის 'static სიცოცხლის მოთხოვნას. პრობლემა, რომელიც აღრიცხულია როგორც rust-lang/rust#164250, ეხება გენერიკულ სტრუქტურას Q<T: 'static + Send>, რომლის ფილდსაც შეიძლება მიენიჭოს ხანმოკლე ლოკალურ მნიშვნელობაზე რეფერენსი. ვინაიდან ფილდი კოვარიანტულია, მინიჭება მიიღება მაშინაც კი, როცა მნიშვნელობა 'static შეზღუდვას არ აკმაყოფილებს. შემდეგ სტრუქტურის Drop-ის იმპლემენტაცია შენახულ რეფერენსს 'static-ად ეპყრობა, რამაც შეიძლება გამოიწვიოს გათავისუფლებული სტეკის მეხსიერების წაკითხვა scope-ის დასრულების შემდეგ.
გავლენა და სიმძიმე
რეპროდიუსერი კომპილირდება მიმდინარე nightly-ებზე და stable-ის გამოშვებებზე, მინიმუმ 1.85.0-ის ჩათვლით. ერთი კონტრიბუტორის თქმით, ეს პატერნი კომპილირდება 2017 წლიდან, Rust 1.18.0-დან მოყოლებული. სანიტიზერების გარეშე პროგრამა ბეჭდავს გათავისუფლებული სტრიქონის შიგთავსს; AddressSanitizer-ის დროს ის stack-use-after-scope შეცდომით კრაშდება. მაინტეინერმა lcnr-მა პრობლემა P-high-ად დაახასიათა და არა P-critical-ად, რადგან 11 წელია არ აღმოჩენილა და რადგან მისი ექსპლუატაცია მოითხოვს განზრახ მავნე Drop-ის იმპლემენტაციას და არა შემთხვევით არასწორ გამოყენებას.
რეაგირება
პრობლემას მინიჭებული აქვს ლეიბლები borrow checker-ის, დესტრუქტორების, სიცოცხლის ვადებისა და ვარიანტობისთვის, და მას Types Team-ი აკონტროლებს. გუნდმა აღნიშნა, რომ ტიპების სისტემის soundness-ის გამოსწორება დიდი პრიორიტეტია, ისევე როგორც შემდეგი თაობის trait solver-ზე მუშაობა, region constraint-ის გადამუშავება და Project Zero. მოხსენების შემდეგ მალევე დაიპუშა commit, რომლის სათაურიცაა „fix: refuse handles in aggregate storage on both front ends“. GitHub-ის თრედი დროებით დაიბლოკა და მხოლოდ კოლაბორატორებზე შემოიფარგლა მას შემდეგ, რაც მან მწვავე დისკუსია გამოიწვია.
წყაროები: Hacker News
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.