<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>50190</bug_id>
          
          <creation_ts>2024-04-26 11:32:08 +0300</creation_ts>
          <short_desc>Добавить макрос %brp_strip_keep_sections для сохранения секций в ELF-ах</short_desc>
          <delta_ts>2024-06-06 16:09:46 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>rpm-build</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Zhukharev">ancieg</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>arseny</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>ldv</cc>
    
    <cc>placeholder</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>245479</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Zhukharev">ancieg</who>
    <bug_when>2024-04-26 11:32:08 +0300</bug_when>
    <thetext>Необходимо для того, чтобы сохранять нестандарные секции в ELF-ах, которые по умолчанию у нас удаляются на этапе strip&apos;а.

Пример изменений в rpm-build в таске 345861 (https://packages.altlinux.org/en/tasks/345861/).
Там же пример использования нового макроса на примере racket-core.

На примере racket-core: хотелось бы _рабочий_ бинарь с секцией .rackboot, но без остального &quot;мусора&quot; (например - /usr/bin/racket).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245526</commentid>
    <comment_count>1</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-04-26 21:04:06 +0300</bug_when>
    <thetext>Я не вносил и не реализовывал идею стрипать всё неизвестное, но, по моему разумению, мы это сделали по следующим причинам:
— чтобы эти секции, попав в память процесса, не выступали случайно или злонамеренно трамплином для уязвимостей;
— чтобы малыми усилиями уменьшить вероятность непреднамеренной активации всяких misfeature в ELF-подсистеме и тулчейне, где при исполнении определённым образом составленных программ или библиотек автомагически отключаются различные меры безопасности или включаются меры, ведущие к уязвимостям;
— наконец, чтобы ELF-файлы не были толще, чем нужно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245527</commentid>
    <comment_count>2</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2024-04-26 21:04:17 +0300</bug_when>
    <thetext>(In reply to Anton Zhukharev from comment #0)
&gt; Необходимо для того, чтобы сохранять нестандарные секции в ELF-ах, которые
&gt; по умолчанию у нас удаляются на этапе strip&apos;а.
&gt; 
&gt; Пример изменений в rpm-build в таске 345861
&gt; (https://packages.altlinux.org/en/tasks/345861/).
&gt; Там же пример использования нового макроса на примере racket-core.
&gt; 
&gt; На примере racket-core: хотелось бы _рабочий_ бинарь с секцией .rackboot, но
&gt; без остального &quot;мусора&quot; (например - /usr/bin/racket).

А что в этом .rackboot находится? Какого рода контент? Подлежит ли эта секция отображению в память при работе, и если да, то как?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245529</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Zhukharev">ancieg</who>
    <bug_when>2024-04-26 22:52:49 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #2)
&gt; (In reply to Anton Zhukharev from comment #0)
&gt; &gt; Необходимо для того, чтобы сохранять нестандарные секции в ELF-ах, которые
&gt; &gt; по умолчанию у нас удаляются на этапе strip&apos;а.
&gt; &gt; 
&gt; &gt; Пример изменений в rpm-build в таске 345861
&gt; &gt; (https://packages.altlinux.org/en/tasks/345861/).
&gt; &gt; Там же пример использования нового макроса на примере racket-core.
&gt; &gt; 
&gt; &gt; На примере racket-core: хотелось бы _рабочий_ бинарь с секцией .rackboot, но
&gt; &gt; без остального &quot;мусора&quot; (например - /usr/bin/racket).
&gt; 
&gt; А что в этом .rackboot находится? Какого рода контент? Подлежит ли эта
&gt; секция отображению в память при работе, и если да, то как?
Это, конечно, нужно у меня из октября 2022-го нужно спрашивать - сейчас я уже и не вспомню что там такого находится конкретно - в памяти остался только один факт: без этой секции бинарь /usr/bin/racket даже запускаться не собирался (была довольно странная ошибка, в которой ключевым словом было &quot;boot&quot;).

Сейчас попробовал сделать элементарный &quot;strip /usr/bin/racket&quot; и бинарь запускается.
Странно - раньше было другое поведение. Видимо, что-то изменилось с того времени и сейчас мне нужно время, чтобы выяснить что конкретно и необходимость этой фичи в целом после такого.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245595</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2024-04-28 13:54:57 +0300</bug_when>
    <thetext>Есть ли прецеденты в других дистрибутивах?

В Федоре делают так

  %global _find_debuginfo_opts --keep-section .rustc

В `rr` нужно сохранить секцию .page но почему-то примера я не нашел.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247257</commentid>
    <comment_count>5</comment_count>
    <who name="Anton Zhukharev">ancieg</who>
    <bug_when>2024-06-05 13:11:23 +0300</bug_when>
    <thetext>(In reply to Anton Zhukharev from comment #3)
&gt; Сейчас попробовал сделать элементарный &quot;strip /usr/bin/racket&quot; и бинарь
&gt; запускается.
&gt; Странно - раньше было другое поведение. Видимо, что-то изменилось с того
&gt; времени и сейчас мне нужно время, чтобы выяснить что конкретно и
&gt; необходимость этой фичи в целом после такого.

Если в спеке racket-core-8.8-alt2 убрать строки:
========================================
%brp_strip_debug %_bindir/*
%brp_strip_debug %racket_libdir/*
========================================
, пересобрать пакет и установить в систему, то /usr/bin/racket работать, все таки, перестает (причем, если strip&apos;нуть его уже после установки при помощи обычного &quot;strip /usr/bin/racket&quot;, то все работает нормально).
Вот так выглядит результат после установки с простым удалением тех двух строк:
========================================
user@host $ racket
malformed fasl-object header in petite
malformed boot file petite
Aborted
========================================</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247258</commentid>
    <comment_count>6</comment_count>
    <who name="Anton Zhukharev">ancieg</who>
    <bug_when>2024-06-05 13:12:32 +0300</bug_when>
    <thetext>(In reply to Vitaly Chikunov from comment #4)
&gt; Есть ли прецеденты в других дистрибутивах?
&gt; 
&gt; В Федоре делают так
&gt; 
&gt;   %global _find_debuginfo_opts --keep-section .rustc
&gt; 
&gt; В `rr` нужно сохранить секцию .page но почему-то примера я не нашел.

Тот же Racket: https://src.fedoraproject.org/rpms/racket/blob/rawhide/f/racket.spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247295</commentid>
    <comment_count>7</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2024-06-06 14:42:53 +0300</bug_when>
    <thetext>(In reply to Vitaly Chikunov from comment #4)
&gt; В `rr` нужно сохранить секцию .page но почему-то примера я не нашел.

Видимо, плохо искал

  %brp_strip_none %_libdir/rr/librr*.so</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247306</commentid>
    <comment_count>8</comment_count>
    <who name="Anton Zhukharev">ancieg</who>
    <bug_when>2024-06-06 16:09:46 +0300</bug_when>
    <thetext>(In reply to Vitaly Chikunov from comment #7)
&gt; (In reply to Vitaly Chikunov from comment #4)
&gt; &gt; В `rr` нужно сохранить секцию .page но почему-то примера я не нашел.
&gt; 
&gt; Видимо, плохо искал
&gt; 
&gt;   %brp_strip_none %_libdir/rr/librr*.so

По названию кажется, что заставит вообще не strip&apos;ать бинари

Мне же - в частности - нужно, чтобы strip происходил, но оставалась только одна секция .rackboot</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>