TGViewer
Блог* Блог* @dereference_pointer_there · 1.98K subscribers
Post #11262 1.09K
#prog #rust

В новой версии Rust 1.97 (надо, кстати, написать про релиз) обнаружилась мискомпиляция, которая приводит к сегфолту (regression-from-stable-to-stable 😱). Судя по всему, проблема с кривой кодогенерацией была с версии 1.87. Корень проблемы, однако, кроется в баге в LLVM, где некорректная трансформация превращает нормальный код в код с безусловным UB. Ошибка произошла из-за неправильной обработки poison. Никита Попов уже открыл PR с фиксом.

Почему сегфолт появился только сейчас, если баг существовал так долго? Дело в том, что в случаях, когда баг проявляется, в машинном коде использовался mov из памяти по указателю с составным индексным выражением, и в этом выражении использовался тег enum-а (считай, дискриминант, но на уровне представления). Недавно в rustc завезли изменение, из-за которого компилятор стал предпочитать для None тег -1. Раньше выбирался ближайший из ниши. При использовании в машинном коде отрицательное число реинтепретировалось, как большое положительное, что приводило к out of bounds чтению и, ожидаемо, сегфолту. Из-за упомянутого бага LLVM чтение вне границ было и раньше, но из-за того, что используемый тег для вычисления адреса был близок к набору валидных значений, к проблемам на практике оно не приводило: доступ было в пределах страницы памяти.
  • 👍 11
  • 🫡 3
  • 👎 2
  • 🤮 2
  • 😢 1
  • 💩 1
More from @dereference_pointer_there
  1. Sep 27, 2026photo post
  2. Sep 27, 2026#meme про прожиг дисков
  3. Sep 27, 2026Если вы считаете себя бесстрашным, попробуйте познакомиться с женщиной.
  4. Sep 27, 2026Почему я не работаю на себя? Начальник кретин
  5. Sep 26, 2026Эм...
  6. Sep 26, 2026#politota #meme, видимо
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →