Софт
В компиляторе Rust найдена 11-летняя ошибка в borrow checker, нарушающая безопасность памяти
В трекере Rust описана проблема, из-за которой компилятор принимает код с некорректным временем жизни ссылки, что приводит к использованию памяти после освобождения.
Ошибка связана с присваиванием через ковариантное поле структуры с реализацией Drop: код в drop получает не-'static ссылку, но предполагает, что она 'static. В примере из issue программа компилируется и печатает чужие данные, а с AddressSanitizer падает с stack-use-after-scope. Проблема воспроизводится на nightly и стабильных версиях минимум с 1.85.0.
Участники обсуждения привели варианты, в том числе без static; один из них, по их словам, сбоит или читает освобождённую память с версии 1.4, а другой компилируется с 1.18.0 (2017).
Представитель команды типов lcnr пояснил, что ошибка получила приоритет P-high, а не P-critical, потому что за 11 лет её никто не встретил. Он считает маловероятным, что она вызвала проблемы случайно: для эксплуатации нужна намеренно вредоносная реализация Drop. Команда называет устранение подобных дыр в системе типов приоритетом.
- Приоритет P-high, не P-critical
- Воспроизводится минимум с Rust 1.85.0
Источники
- Hacker News: 11 year old unsoundness bugs found in Rust borrow checker · 13 октября 2026, 13:27
Текст подготовлен автоматически по материалам источников и может содержать неточности.