Summary: | Добавить макрос %brp_strip_keep_sections для сохранения секций в ELF-ах | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Anton Zhukharev <ancieg> |
Component: | rpm-build | Assignee: | placeholder <placeholder> |
Status: | NEW --- | QA Contact: | qa-sisyphus |
Severity: | enhancement | ||
Priority: | P5 | CC: | arseny, glebfm, imz, ldv, placeholder, vt |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Anton Zhukharev
2024-04-26 11:32:08 MSK
Я не вносил и не реализовывал идею стрипать всё неизвестное, но, по моему разумению, мы это сделали по следующим причинам: — чтобы эти секции, попав в память процесса, не выступали случайно или злонамеренно трамплином для уязвимостей; — чтобы малыми усилиями уменьшить вероятность непреднамеренной активации всяких misfeature в ELF-подсистеме и тулчейне, где при исполнении определённым образом составленных программ или библиотек автомагически отключаются различные меры безопасности или включаются меры, ведущие к уязвимостям; — наконец, чтобы ELF-файлы не были толще, чем нужно. (In reply to Anton Zhukharev from comment #0) > Необходимо для того, чтобы сохранять нестандарные секции в ELF-ах, которые > по умолчанию у нас удаляются на этапе strip'а. > > Пример изменений в rpm-build в таске 345861 > (https://packages.altlinux.org/en/tasks/345861/). > Там же пример использования нового макроса на примере racket-core. > > На примере racket-core: хотелось бы _рабочий_ бинарь с секцией .rackboot, но > без остального "мусора" (например - /usr/bin/racket). А что в этом .rackboot находится? Какого рода контент? Подлежит ли эта секция отображению в память при работе, и если да, то как? (Ответ для Arseny Maslennikov на комментарий #2) > (In reply to Anton Zhukharev from comment #0) > > Необходимо для того, чтобы сохранять нестандарные секции в ELF-ах, которые > > по умолчанию у нас удаляются на этапе strip'а. > > > > Пример изменений в rpm-build в таске 345861 > > (https://packages.altlinux.org/en/tasks/345861/). > > Там же пример использования нового макроса на примере racket-core. > > > > На примере racket-core: хотелось бы _рабочий_ бинарь с секцией .rackboot, но > > без остального "мусора" (например - /usr/bin/racket). > > А что в этом .rackboot находится? Какого рода контент? Подлежит ли эта > секция отображению в память при работе, и если да, то как? Это, конечно, нужно у меня из октября 2022-го нужно спрашивать - сейчас я уже и не вспомню что там такого находится конкретно - в памяти остался только один факт: без этой секции бинарь /usr/bin/racket даже запускаться не собирался (была довольно странная ошибка, в которой ключевым словом было "boot"). Сейчас попробовал сделать элементарный "strip /usr/bin/racket" и бинарь запускается. Странно - раньше было другое поведение. Видимо, что-то изменилось с того времени и сейчас мне нужно время, чтобы выяснить что конкретно и необходимость этой фичи в целом после такого. Есть ли прецеденты в других дистрибутивах? В Федоре делают так %global _find_debuginfo_opts --keep-section .rustc В `rr` нужно сохранить секцию .page но почему-то примера я не нашел. (In reply to Anton Zhukharev from comment #3) > Сейчас попробовал сделать элементарный "strip /usr/bin/racket" и бинарь > запускается. > Странно - раньше было другое поведение. Видимо, что-то изменилось с того > времени и сейчас мне нужно время, чтобы выяснить что конкретно и > необходимость этой фичи в целом после такого. Если в спеке racket-core-8.8-alt2 убрать строки: ======================================== %brp_strip_debug %_bindir/* %brp_strip_debug %racket_libdir/* ======================================== , пересобрать пакет и установить в систему, то /usr/bin/racket работать, все таки, перестает (причем, если strip'нуть его уже после установки при помощи обычного "strip /usr/bin/racket", то все работает нормально). Вот так выглядит результат после установки с простым удалением тех двух строк: ======================================== user@host $ racket malformed fasl-object header in petite malformed boot file petite Aborted ======================================== (In reply to Vitaly Chikunov from comment #4) > Есть ли прецеденты в других дистрибутивах? > > В Федоре делают так > > %global _find_debuginfo_opts --keep-section .rustc > > В `rr` нужно сохранить секцию .page но почему-то примера я не нашел. Тот же Racket: https://src.fedoraproject.org/rpms/racket/blob/rawhide/f/racket.spec (In reply to Vitaly Chikunov from comment #4) > В `rr` нужно сохранить секцию .page но почему-то примера я не нашел. Видимо, плохо искал %brp_strip_none %_libdir/rr/librr*.so (In reply to Vitaly Chikunov from comment #7) > (In reply to Vitaly Chikunov from comment #4) > > В `rr` нужно сохранить секцию .page но почему-то примера я не нашел. > > Видимо, плохо искал > > %brp_strip_none %_libdir/rr/librr*.so По названию кажется, что заставит вообще не strip'ать бинари Мне же - в частности - нужно, чтобы strip происходил, но оставалась только одна секция .rackboot |