Վերադառնալ
Rust-ի soundness թերություն՝ կոդը դաշտի նշանակմամբ խախտում է 'static կյանքի սահմանափակումը
SiTech AI Team2 րոպե ընթերցում

Rust-ի soundness թերություն՝ կոդը դաշտի նշանակմամբ խախտում է 'static կյանքի սահմանափակումը

Նոր հայտնաբերված Rust-ի խնդիրը ցույց է տալիս, որ կովարիանտ դաշտի նշանակումը խախտում է կառուցվածքի 'static կյանքի պահանջը և Drop-ի կոդին հնարավորություն է տալիս կարճաժամկետ հղումները static ճանաչել և հեռացված հիշողությունը կարդալ։

Թերություն

Rust-ի տիպերի համակարգում առկա soundness թերությունը կոդին թույլ է տալիս կովարիանտ դաշտի նշանակմամբ շրջանցել կառուցվածքի 'static կյանքի պահանջը։ Խնդիրը, որը գրանցված է որպես rust-lang/rust#164250, վերաբերում է ընդհանուր կառուցվածքին Q<T: 'static + Send>, որի դաշտը կարող է նշանակվել կարճաժամկետ տեղական արժեքի հղմանը։ Քանի որ դաշտը կովարիանտ է, նշանակումը ընդունվում է նույնիսկ այն դեպքում, երբ արժեքը չի բավարարում 'static սահմանափակումը։ Հետո կառուցվածքի Drop-ի իրականացումը պահված հղումը վերաբերում է որպես 'static, ինչը կարող է հանգեցնել ազատված ստեկի հիշողության կարդալուն շրջանակի ավարտից հետո։

Ազդեցություն և ծանրություն

Վերարտադրողը կմպիլացվում է ընթացիկ 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: refuses handles in aggregate storage on both front ends“։ GitHub-ի թեման ժամանակավորապես արգելափակվել է և սահմանափակվել է միայն համագործակցողներով այն բանից հետո, երբ այն ստեծել է սաստիկ քննարկում։

Աղբյուրներ: Hacker News

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։