Назад
Дефект soundness у Rust: код при присвоєнні поля ігнорує межі часу життя 'static
SiTech AI Team2 хв читання

Дефект soundness у Rust: код при присвоєнні поля ігнорує межі часу життя 'static

Нещодавно зафіксована проблема Rust показує, що коваріантне присвоєння поля порушує обмеження часу життя 'static структури і дозволяє коду Drop вважати короткі посилання статичними та читати видалену пам'ять.

Дефект

Наявна в системі типів 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. Після повідомлення коміт із заголовком «fix: refuse handles in aggregate storage on both front ends» невдовзі було запушено. Потік на GitHub тимчасово заблокували й обмежили лише співавторами після того, як він викликав гостру дискусію.

Джерела: Hacker News

SSiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.