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

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

    <bug>
          <bug_id>37213</bug_id>
          
          <creation_ts>2019-09-12 17:37:55 +0300</creation_ts>
          <short_desc>Сборка syslinux6 в Sisyphus</short_desc>
          <delta_ts>2024-08-30 10:36:14 +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>syslinux</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Николай Костригин">nickel</reporter>
          <assigned_to name="Николай Костригин">nickel</assigned_to>
          <cc>alexey.tourbin</cc>
    
    <cc>darktemplaralt</cc>
    
    <cc>glebfm</cc>
    
    <cc>iv</cc>
    
    <cc>klark</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>rider</cc>
    
    <cc>sin</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>184269</commentid>
    <comment_count>0</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-12 17:37:55 +0300</bug_when>
    <thetext>Необходимо сделать модули syslinux6 *.с32 представляющиеся как dynamically linked ELF отличимыми от обычных dynamically linked ELF, чтобы проверка сборочницы на bad_elf_symbols их пропускала.
https://bugzilla.altlinux.org/show_bug.cgi?id=34481#c19</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184270</commentid>
    <comment_count>1</comment_count>
    <who name="Aleksei Nikiforov">darktemplaralt</who>
    <bug_when>2019-09-12 17:41:44 +0300</bug_when>
    <thetext>(In reply to comment #0)
&gt; Необходимо сделать модули syslinux6 *.с32 представляющиеся как dynamically
&gt; linked ELF отличимыми от обычных dynamically linked ELF, чтобы проверка
&gt; сборочницы на bad_elf_symbols их пропускала.
&gt; https://bugzilla.altlinux.org/show_bug.cgi?id=34481#c19

Может, чем хакать файлы загрузчика, лучше добавить исключения для данных файлов?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184271</commentid>
    <comment_count>2</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-09-12 17:47:39 +0300</bug_when>
    <thetext>предлагаю спросить это у ментейнера сборочницы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184274</commentid>
    <comment_count>3</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-12 18:04:54 +0300</bug_when>
    <thetext>(В ответ на комментарий №2)
&gt; предлагаю спросить это у ментейнера сборочницы.


Уже. Я даже уже пожалел, что сразу в devel не отправил свой изначальный вопрос...

&gt;
&gt; Алексей, Дмитрий, здравствуйте!
&gt;
&gt; 09.09.2019 9:57, Alexey Gladkov пишет:
&gt;
&gt;&gt; On Sat, Sep 07, 2019 at 11:47:55AM +0300, Dmitry V. Levin wrote:
&gt;&gt;&gt;&gt; Дим, эта бомба всё-таки взорвалась. Нужно какое-то более общее решение.
&gt;&gt;&gt;&gt; Дим, что ты думаешь ?
&gt;&gt;&gt; Я бы хотел, чтобы эти ELFы можно было отличить от обычных.
&gt;&gt;&gt;
&gt;&gt;&gt; Если же это совсем обычные ELFы, которые при желании можно слинковать
&gt;&gt;&gt; с другими обычными, тогда я думаю, что их можно как-нибудь помечать
&gt;&gt;&gt; с тем, чтобы отличать от обычных.
&gt;&gt; как насчёт добавить специальную секцию в elf ?
&gt; По-моему - отличная идея.
&gt;
&gt; Я добавлю, скажем, &quot;.boot.code.module&quot; и проверю - не сломается ли чего...
&gt; Кстати, добавлением секций со списком зависимостей и именем модуля
&gt; решается вопрос модульности в grub.
&gt; Мы же, как я понимаю, можем обойтись просто пустой секцией с именем?
&gt;
&gt; Чтобы не отвлекать Дмитрия от основных дел я, попробую разобраться в
&gt; премудростях perl и предложу свои изменения к эльфопроверялке по готовности.
&gt;
&gt; Дмитрий, можно ли расчитывать на освобождение модифицированных elf&apos;ов из
&gt; &quot;тюрьмы&quot; в /boot в случае успеха?

Тем не менее, вопрос к ldv@ по поводу возможности в дальнейшем размещать такие модифицированные ELF&apos;ы за пределами /boot все еще актуален...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184279</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-12 23:17:44 +0300</bug_when>
    <thetext>(In reply to comment #3)
&gt; (В ответ на комментарий №2)
&gt; &gt; предлагаю спросить это у ментейнера сборочницы.
&gt; 
&gt; 
&gt; Уже. Я даже уже пожалел, что сразу в devel не отправил свой изначальный
&gt; вопрос...
&gt; 
&gt; &gt;
&gt; &gt; Алексей, Дмитрий, здравствуйте!
&gt; &gt;
&gt; &gt; 09.09.2019 9:57, Alexey Gladkov пишет:
&gt; &gt;
&gt; &gt;&gt; On Sat, Sep 07, 2019 at 11:47:55AM +0300, Dmitry V. Levin wrote:
&gt; &gt;&gt;&gt;&gt; Дим, эта бомба всё-таки взорвалась. Нужно какое-то более общее решение.
&gt; &gt;&gt;&gt;&gt; Дим, что ты думаешь ?
&gt; &gt;&gt;&gt; Я бы хотел, чтобы эти ELFы можно было отличить от обычных.
&gt; &gt;&gt;&gt;
&gt; &gt;&gt;&gt; Если же это совсем обычные ELFы, которые при желании можно слинковать
&gt; &gt;&gt;&gt; с другими обычными, тогда я думаю, что их можно как-нибудь помечать
&gt; &gt;&gt;&gt; с тем, чтобы отличать от обычных.
&gt; &gt;&gt; как насчёт добавить специальную секцию в elf ?
&gt; &gt; По-моему - отличная идея.
&gt; &gt;
&gt; &gt; Я добавлю, скажем, &quot;.boot.code.module&quot; и проверю - не сломается ли чего...
&gt; &gt; Кстати, добавлением секций со списком зависимостей и именем модуля
&gt; &gt; решается вопрос модульности в grub.
&gt; &gt; Мы же, как я понимаю, можем обойтись просто пустой секцией с именем?
&gt; &gt;
&gt; &gt; Чтобы не отвлекать Дмитрия от основных дел я, попробую разобраться в
&gt; &gt; премудростях perl и предложу свои изменения к эльфопроверялке по готовности.
&gt; &gt;
&gt; &gt; Дмитрий, можно ли расчитывать на освобождение модифицированных elf&apos;ов из
&gt; &gt; &quot;тюрьмы&quot; в /boot в случае успеха?
&gt; 
&gt; Тем не менее, вопрос к ldv@ по поводу возможности в дальнейшем размещать такие
&gt; модифицированные ELF&apos;ы за пределами /boot все еще актуален...

Мы же именно для этого хотим добавить новую секцию, верно?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184280</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-12 23:29:59 +0300</bug_when>
    <thetext>(In reply to comment #4)
&gt; Мы же именно для этого хотим добавить новую секцию, верно?

Да, было бы круто их отличать и люто карать!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184428</commentid>
    <comment_count>6</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-20 14:25:07 +0300</bug_when>
    <thetext>(В ответ на комментарий №5)
&gt; Да, было бы круто их отличать и люто карать!

Люто - это научить ldd этих эльфов не есть?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184430</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-20 14:52:25 +0300</bug_when>
    <thetext>(In reply to comment #6)
&gt; Люто - это научить ldd этих эльфов не есть?

Скорее ld.so. Добавил &quot;.boot.code&quot; и хрен в системе выполнишь без дополнительных телодвижений.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184448</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-21 13:16:13 +0300</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Люто - это научить ldd этих эльфов не есть?
&gt; 
&gt; Скорее ld.so. Добавил &quot;.boot.code&quot;

Почему именно &quot;.boot.code&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184488</commentid>
    <comment_count>9</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-23 10:56:03 +0300</bug_when>
    <thetext>

(В ответ на комментарий №8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; Люто - это научить ldd этих эльфов не есть?
&gt; &gt; 
&gt; &gt; Скорее ld.so. Добавил &quot;.boot.code&quot;
&gt; 
&gt; Почему именно &quot;.boot.code&quot;?

Может быть из-за упоминания в комментарии 3 .boot.code.module?
Изначально логика была такая: побольше слов, чтобы избежать случайных пересечений в дальнейшем и то, что такую секцию с наибольшей вероятностью придется пришивать к ELF-файлам исполняющимся до запуска системы, а это будет скорее всего модуль загрузчика.

Я что-то упускаю?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184491</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-23 12:37:14 +0300</bug_when>
    <thetext>(In reply to comment #8)
&gt; Почему именно &quot;.boot.code&quot;?

Я взят то, что nickel@ предложил. Можно выбрать другое имя.

&gt; Я что-то упускаю?

Вроде всё верно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184492</commentid>
    <comment_count>11</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 12:39:44 +0300</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; Почему именно &quot;.boot.code&quot;?
&gt; 
&gt; Я взят то, что nickel@ предложил. Можно выбрать другое имя.

Давайте подумаем, какое имя лучше выбрать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184493</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-23 12:57:01 +0300</bug_when>
    <thetext>(In reply to comment #11)
&gt; Давайте подумаем, какое имя лучше выбрать.

.presystem ?
.prekernel ?
.bootloader ?
.boottime ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184494</commentid>
    <comment_count>13</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-09-23 13:00:42 +0300</bug_when>
    <thetext>Когда нечего придумать - можно взять random. Его точно никто использовать не будет.
.yoongei6Hahshahgh6pais9cumeetohs1sie

По смыслу всё равно это понимать должны только скрипты.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184495</commentid>
    <comment_count>14</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 13:03:27 +0300</bug_when>
    <thetext>Это точно про boot?

Если мы хотим некий относительно универсальный механизм,
чтобы dynamic linker и rpmelfsym &quot;не видели&quot; такие ELFы,
то это не только про boot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184497</commentid>
    <comment_count>15</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 13:07:32 +0300</bug_when>
    <thetext>(In reply to comment #14)
&gt; Это точно про boot?
&gt; 
&gt; Если мы хотим некий относительно универсальный механизм,
&gt; чтобы dynamic linker и rpmelfsym &quot;не видели&quot; такие ELFы,
&gt; то это не только про boot.

Кстати, вопрос, dlopen&apos;ом эти файлы тоже не должны открываться?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184499</commentid>
    <comment_count>16</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-23 13:39:59 +0300</bug_when>
    <thetext>(В ответ на комментарий №15)
&gt; (In reply to comment #14)
&gt; &gt; Это точно про boot?
&gt; &gt; 
&gt; &gt; Если мы хотим некий относительно универсальный механизм,
&gt; &gt; чтобы dynamic linker и rpmelfsym &quot;не видели&quot; такие ELFы,
&gt; &gt; то это не только про boot.
&gt; 
&gt; Кстати, вопрос, dlopen&apos;ом эти файлы тоже не должны открываться?

Мне видится, что да - не должны, но тогда надо понять, какие еще бинарные модули
могут подпадать под &quot;юрисдикцию&quot; этого механизма, чтобы придумать более общее название.

Скорее всего многие программы, реализующие систему расширений на базе т.н. plugin&apos;ов, пользуются dlopen и им перекрывать доступ к нему нельзя.

Проверил для MySQL:

/* Compile dll path */
  strxnmov(dlpath, sizeof(dlpath) - 1, plugindir, &quot;/&quot;, name, SO_EXT, NullS);

  DBUG_PRINT(&quot;info&quot;, (&quot;dlopeninig %s&quot;, dlpath));
  /* Open new dll handle */
  if (!(dlhandle = dlopen(dlpath, RTLD_NOW))) {

 
Хотя при сборке verify-elf регулярно недоволен:

verify-elf: WARNING: ./usr/lib64/mysql/plugin/version_token.so: undefined symbol: my_charset_latin1
verify-elf: WARNING: ./usr/lib64/mysql/plugin/version_token.so: undefined symbol: psi_rwlock_service

проверку rpmelfsym такие plugin&apos;ны проходят нормально.

Т.е. нужно найти еще хоть что-то, что собирается в dynamically linked ELF, но при этом не являющийся ни библиотекой или плагином, ни частью загрузчика...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184501</commentid>
    <comment_count>17</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 13:43:46 +0300</bug_when>
    <thetext>(In reply to comment #16)
&gt; (В ответ на комментарий №15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; Это точно про boot?
&gt; &gt; &gt; 
&gt; &gt; &gt; Если мы хотим некий относительно универсальный механизм,
&gt; &gt; &gt; чтобы dynamic linker и rpmelfsym &quot;не видели&quot; такие ELFы,
&gt; &gt; &gt; то это не только про boot.
&gt; &gt; 
&gt; &gt; Кстати, вопрос, dlopen&apos;ом эти файлы тоже не должны открываться?
&gt; 
&gt; Мне видится, что да - не должны, но тогда надо понять, какие еще бинарные
&gt; модули
&gt; могут подпадать под &quot;юрисдикцию&quot; этого механизма, чтобы придумать более общее
&gt; название.

Переформулирую вопрос: syslinux со своим необычным загрузчиком ELFов может использовать обычный dlopen или нет?  Я предполагаю, что нет.

&gt; Скорее всего многие программы, реализующие систему расширений на базе т.н.
&gt; plugin&apos;ов, пользуются dlopen и им перекрывать доступ к нему нельзя.

Они используют обычный механизм, об этом речи не идёт.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184502</commentid>
    <comment_count>18</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 13:46:18 +0300</bug_when>
    <thetext>Предлагаю подумать в строну имён вида .alt.ld.so.skip
где .alt - это наш альтовый префикс.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184504</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-23 13:54:08 +0300</bug_when>
    <thetext>(In reply to comment #15)
&gt; Кстати, вопрос, dlopen&apos;ом эти файлы тоже не должны открываться?

Пока мы говорим о файлах в формате ELF, которые выполняются не в системе, а где-то ещё. В частности, в процессе загрузки до загрузки ядра. Исходя из этого ELF-файлы с этим признаком в идеале не должны обрабатываться никак в системе.

Собственно, название секции я предлагал исходя из этого.

Если хочется более общее название, то по сути этот признак будет отключать обработку этих файлов и только у нас в дистрибутиве.

.altlinux.ignored ?
.altlinux.unverified ?

(In reply to comment #13)
&gt; Когда нечего придумать - можно взять random. Его точно никто использовать не
&gt; будет.
&gt; .yoongei6Hahshahgh6pais9cumeetohs1sie
&gt; 
&gt; По смыслу всё равно это понимать должны только скрипты.

Антон, это неудобно использовать в патчах. Хочется всё-таки осмысленное что-то.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184505</commentid>
    <comment_count>20</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-23 13:57:29 +0300</bug_when>
    <thetext>(В ответ на комментарий №18)
&gt; Предлагаю подумать в строну имён вида .alt.ld.so.skip
&gt; где .alt - это наш альтовый префикс.

Ничего против не имею. Это будет отражать скорее механизм обработки, а не принадлежность какому-то классу программ.
Если других замечаний по
 http://git.altlinux.org/people/nickel/packages/?p=perl-qa-rpmelfsym.git;a=commit;h=e3038cc3481ef19080616f3fb0dbe5ac4e2dc442
не будет, то я переделаю с предложенным именем секции и пересоберу.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184506</commentid>
    <comment_count>21</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-09-23 13:57:46 +0300</bug_when>
    <thetext>Если хочется осмысленное, тогда лучше назвать по имени приложения/скрипта, которое будет эту настройку обрабатывать Например .alt.rpm.verify-elf.skip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184507</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-23 13:58:21 +0300</bug_when>
    <thetext>(In reply to comment #17)
&gt; Переформулирую вопрос: syslinux со своим необычным загрузчиком ELFов может
&gt; использовать обычный dlopen или нет?  Я предполагаю, что нет.

Может использовать, если будет LUA_USE_DLOPEN:

http://git.altlinux.org/people/legion/packages/extlinux.git?p=extlinux.git;a=blob;f=com32/lua/src/loadlib.c#l139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184508</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-23 14:00:38 +0300</bug_when>
    <thetext>(In reply to comment #21)
&gt; Если хочется осмысленное, тогда лучше назвать по имени приложения/скрипта,
&gt; которое будет эту настройку обрабатывать Например .alt.rpm.verify-elf.skip

Ну во-первых хочется не только игнорировать их в rpm проверках.
Ну и слово elf в ELF-хэдере кажется лишним )))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184509</commentid>
    <comment_count>24</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-09-23 14:02:49 +0300</bug_when>
    <thetext>(В ответ на комментарий №23)
&gt; (In reply to comment #21)
&gt; &gt; Если хочется осмысленное, тогда лучше назвать по имени приложения/скрипта,
&gt; &gt; которое будет эту настройку обрабатывать Например .alt.rpm.verify-elf.skip
&gt; 
&gt; Ну во-первых хочется не только игнорировать их в rpm проверках.

А где ещё ?

&gt; Ну и слово elf в ELF-хэдере кажется лишним )))

Ок, убираем rpm и elf и получаем .alt.verify.skip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184510</commentid>
    <comment_count>25</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 14:05:13 +0300</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #17)
&gt; &gt; Переформулирую вопрос: syslinux со своим необычным загрузчиком ELFов может
&gt; &gt; использовать обычный dlopen или нет?  Я предполагаю, что нет.
&gt; 
&gt; Может использовать, если будет LUA_USE_DLOPEN:
&gt; 
&gt; http://git.altlinux.org/people/legion/packages/extlinux.git?p=extlinux.git;a=blob;f=com32/lua/src/loadlib.c#l139

Обычный dlopen завязан на обычный ld.so.
Если загрузчик ELFов необычный, то и dlopen необычный.

Это я спрашивал с точки зрения будущей реализации обработки этой секции в обычном ld.so/dlopen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184511</commentid>
    <comment_count>26</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 14:07:47 +0300</bug_when>
    <thetext>(In reply to comment #24)
&gt; (В ответ на комментарий №23)
&gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; Если хочется осмысленное, тогда лучше назвать по имени приложения/скрипта,
&gt; &gt; &gt; которое будет эту настройку обрабатывать Например .alt.rpm.verify-elf.skip
&gt; &gt; 
&gt; &gt; Ну во-первых хочется не только игнорировать их в rpm проверках.
&gt; 
&gt; А где ещё ?

Насколько я понял, идея Алексея в том, чтобы
(1) игнорировать этих эльфов в ld.so и dlopen;
(2) игнорировать их в rpmelfsym.

причём (2) становится оправданным именно вследствие (1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184512</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-23 14:15:26 +0300</bug_when>
    <thetext>(In reply to comment #25)
&gt; Это я спрашивал с точки зрения будущей реализации обработки этой секции в
&gt; обычном ld.so/dlopen.

Если мы говорим про syslinux, то мы можем делать в системе что угодно. По понятным причинам они не пользуются системным libc. У них своя:

http://git.altlinux.org/people/legion/packages/extlinux.git?p=extlinux.git;a=tree;f=com32/lib;h=97a22245bcaf4d2ce3b8d55542ffe584081e8c96;hb=5e426532210bb830d2d7426eb8d8c154d9dfcba6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184513</commentid>
    <comment_count>28</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-09-23 14:17:48 +0300</bug_when>
    <thetext>(В ответ на комментарий №26)
&gt; (In reply to comment #24)
&gt; &gt; (В ответ на комментарий №23)
&gt; &gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; &gt; Если хочется осмысленное, тогда лучше назвать по имени приложения/скрипта,
&gt; &gt; &gt; &gt; которое будет эту настройку обрабатывать Например .alt.rpm.verify-elf.skip
&gt; &gt; &gt; 
&gt; &gt; &gt; Ну во-первых хочется не только игнорировать их в rpm проверках.
&gt; &gt; 
&gt; &gt; А где ещё ?
&gt; 
&gt; Насколько я понял, идея Алексея в том, чтобы
&gt; (1) игнорировать этих эльфов в ld.so и dlopen;
&gt; (2) игнорировать их в rpmelfsym.
&gt; 
&gt; причём (2) становится оправданным именно вследствие (1).

А может ли кто-то однозначно утверждать, что такие эльфы никто и нигде не использует в libc&apos;шном dlopen?

Ну и если так, то может быть есть какие-то другие параметры, позволяющие добавить такое исключение ? Например Class в NONE выставить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184514</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-23 14:32:37 +0300</bug_when>
    <thetext>(In reply to comment #28)
&gt; А может ли кто-то однозначно утверждать, что такие эльфы никто и нигде не
&gt; использует в libc&apos;шном dlopen?

Я могу. Эти файлы исполняются до загрузки вообще всего. Как правило эти файлы загружаются по сети или же из специального раздела, который понимает загрузчик.

&gt; Ну и если так, то может быть есть какие-то другие параметры, позволяющие
&gt; добавить такое исключение ? Например Class в NONE выставить.

Так сделать нельзя. Например, syslinux проверяет класс и другие флаги:

http://git.altlinux.org/people/legion/packages/extlinux.git?p=extlinux.git;a=blob;f=com32/lib/sys/module/common.c;h=05a27e854f5c0a4a8b960a9f3e5041c040ed94d7;hb=5e426532210bb830d2d7426eb8d8c154d9dfcba6#l222

Этот проект пользуется ELF как удобным форматом. Не нужно портить каким-то образом эти файлы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184515</commentid>
    <comment_count>30</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-23 14:41:35 +0300</bug_when>
    <thetext>Антон, чтобы сократить количество вопросов вот выдержка из ченджлога проекта:

com32: Switched from the COM32 object format to ELF as it is a much more powerful format that allows undefined symbols to be resolved at runtime and dynamic loading of module dependencies, which means modules now become shared object files instead of statically linked binaries - reducing both disk space and runtime memory consumption.

https://wiki.syslinux.org/wiki/index.php?title=Syslinux_5_Changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184518</commentid>
    <comment_count>31</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-09-23 15:22:58 +0300</bug_when>
    <thetext>Лёш, спасибо. Так всё понятно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184523</commentid>
    <comment_count>32</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 16:37:51 +0300</bug_when>
    <thetext>(In reply to comment #20)
&gt; (В ответ на комментарий №18)
&gt; &gt; Предлагаю подумать в строну имён вида .alt.ld.so.skip
&gt; &gt; где .alt - это наш альтовый префикс.
&gt; 
&gt; Ничего против не имею. Это будет отражать скорее механизм обработки, а не
&gt; принадлежность какому-то классу программ.
&gt; Если других замечаний по
&gt; 
&gt; http://git.altlinux.org/people/nickel/packages/?p=perl-qa-rpmelfsym.git;a=commit;h=e3038cc3481ef19080616f3fb0dbe5ac4e2dc442
&gt; не будет, то я переделаю с предложенным именем секции и пересоберу.

Думаю, что в коде лучше использовать objdump -h -j .alt.ld.so.skip и проверять код возврата.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184529</commentid>
    <comment_count>33</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-23 17:58:24 +0300</bug_when>
    <thetext>(В ответ на комментарий №32)

&gt; 
&gt; Думаю, что в коде лучше использовать objdump -h -j .alt.ld.so.skip и проверять
&gt; код возврата.

Если больше не планируется проверять ELF-файл на наличие каких-то других секций, то да, такая адресная проверка не допускает разночтений. В текущей же реализации можно &quot;сэкономить&quot; на повторном вызове objdump если нужно более 1 сравнения.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184531</commentid>
    <comment_count>34</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-23 18:08:22 +0300</bug_when>
    <thetext>(In reply to comment #33)
&gt; (В ответ на комментарий №32)
&gt; 
&gt; &gt; 
&gt; &gt; Думаю, что в коде лучше использовать objdump -h -j .alt.ld.so.skip и проверять
&gt; &gt; код возврата.
&gt; 
&gt; Если больше не планируется проверять ELF-файл на наличие каких-то других
&gt; секций, то да, такая адресная проверка не допускает разночтений. В текущей же
&gt; реализации можно &quot;сэкономить&quot; на повторном вызове objdump если нужно более 1
&gt; сравнения.

Это понятно, но сейчас других сравнений не планируется.
Можно оставить комментарий о том, как лучше поступить в будущем,
если такие сравнения понадобится добавить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184563</commentid>
    <comment_count>35</comment_count>
    <who name="">alexey.tourbin</who>
    <bug_when>2019-09-24 21:43:36 +0300</bug_when>
    <thetext>Мужчины, у меня написан ELF-парсер на Си для новой реализации rpmelfsym, который парсит только program header и PT_DYNAMIC.  Секции чота парсить неохота.  А есть какие-нибудь другие косвенные признаки, по которым можно понять, что эльф левый?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184564</commentid>
    <comment_count>36</comment_count>
    <who name="">alexey.tourbin</who>
    <bug_when>2019-09-24 21:59:02 +0300</bug_when>
    <thetext>Кстати когда ld.so откупоривает эльфа, то он смотрит у него какой-то ABI tag, в котором по идее зашита минимальная версия ядра, но вроде еще какие-то поля есть.  Может туда прописать что-нибудь неприличное?  Лучше конечно кросс-дистрибутивное решение выработать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184565</commentid>
    <comment_count>37</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-24 23:01:23 +0300</bug_when>
    <thetext>(In reply to comment #35)
&gt; Секции чота парсить неохота.

Так себе аргумент.

&gt; А есть какие-нибудь другие косвенные признаки, по которым можно
&gt; понять, что эльф левый?

Когда мы с Димой пытались найти какие-нибудь признаки, то у нас это не получилось.
В сизифе есть пакет extlinux. Можешь попробовать понять, что в /boot/extlinux лежат левые бинарники ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184566</commentid>
    <comment_count>38</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-25 00:26:19 +0300</bug_when>
    <thetext>(В ответ на комментарий №35)
&gt; А есть какие-нибудь другие косвенные признаки, по которым можно
&gt; понять, что эльф левый?

Вот тут лог сборки, можно увидеть, что никаких особенных действий при линковке и strip&apos;e модулей *.c32 не производится:

http://git.altlinux.org/tasks/236472/build/400/x86_64/log

ld -shared -m elf_x86_64 --hash-style=gnu -T /usr/src/RPM/BUILD/syslinux6-6.04/com32/lib/x86_64/elf.ld -soname libcom32.c32 -o libcom32.elf zlib/adler32.o zlib/compress.o zlib/crc32.o zlib/uncompr.o zlib/deflate.o zlib/trees.o zlib/zutil.o zlib/inflate.o
 [...] 
syslinux/initramfs_archive.o sys/libansi.o sys/gpxe.o atexit.o onexit.o abort.o

objcopy --strip-debug --strip-unneeded libcom32.elf libcom32.c32

ld-скрипт:

http://git.altlinux.org/tasks/236472/gears/400/git?p=git;a=blob;f=syslinux/com32/lib/x86_64/elf.ld;h=10ee7c44e160eb2da6b7db4f4e3db9f84754d5f6;hb=b1b5eaf39dc8d99e6a45479eb65642949e5f02f5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184567</commentid>
    <comment_count>39</comment_count>
    <who name="">alexey.tourbin</who>
    <bug_when>2019-09-25 02:48:58 +0300</bug_when>
    <thetext>Загрузчику тоже неохота парсить секции.  Когда он ищет секцию .note.ABI-tag, то он на самом деле не видит имени секции, а только видит PT_NOTE и дальше смотрит что там внутри.
https://sourceware.org/git/?p=glibc.git;a=blob;f=elf/dl-load.c;h=21a91b9484cd5d98bbbab45ef4e8e38cb45cce33;hb=5d245b5f8d9663953c20107e3bb16fe249e48126#l1678
Если загрузчик такие файлы сразу не отвергает, почему тогда rpmelfsym их должен сразу отвергать?

Неохота на самом деле потому что когда я читаю из cpio stream, то могу сразу прочитать DYNAMIC секцию без создания временного файла.  С точки зрения rpmelfsym мне нужна только DYNAMIC секция, в ней внутри всё есть!  А если надо будет читать ELF в нескольких местах, не обязательно упорядоченных по смещению, то это будет более сложная конструкция.  А у вас как раз предлагается сделать пустую секцию, в которой значащей будет только ее имя, не видное через program header.

В общем местечковые конструкции на уровне формата ELF мне не нравятся.  Проще добавить куда надо исключение типа &apos;syslinux.*\.c32\t&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184573</commentid>
    <comment_count>40</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-25 11:13:49 +0300</bug_when>
    <thetext>(In reply to comment #39)
&gt; В общем местечковые конструкции на уровне формата ELF мне не нравятся.  Проще
&gt; добавить куда надо исключение типа &apos;syslinux.*\.c32\t&apos;.

Если Диме нравится такой подход, то я только за. Вот только у нас уже не только syslinux, но и extlinux и grub2. Но в целом, тоже решение.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184575</commentid>
    <comment_count>41</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-25 11:34:17 +0300</bug_when>
    <thetext>Коллеги, извините, я беру паузу до конференции в Калуге в конце этой недели.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184577</commentid>
    <comment_count>42</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-25 12:09:18 +0300</bug_when>
    <thetext>(В ответ на комментарий №40)
&gt; (In reply to comment #39)
&gt; &gt; В общем местечковые конструкции на уровне формата ELF мне не нравятся.  Проще
&gt; &gt; добавить куда надо исключение типа &apos;syslinux.*\.c32\t&apos;.
&gt; 
&gt; Если Диме нравится такой подход, то я только за. Вот только у нас уже не только
&gt; syslinux, но и extlinux и grub2. Но в целом, тоже решение.

Ну, вообще, syslinux и extlinux - теперь суть один проект.

grub2 от этого вообще в стороне, по крайней мере пока, - у них модульность держится на своих скриптах формирующих списки зависимостей и рассовывающих их по своим придуманным секциям и своем же динамическом загрузчике:

  6 .moddeps      00000025  00000000  00000000  000038a0  2**0
                  CONTENTS, READONLY
  7 .modname      00000006  00000000  00000000  000038c5  2**0
                  CONTENTS, READONLY

ELF у grub2 типа REL, а не DYN и rpmelfsyms их игнорирует.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184578</commentid>
    <comment_count>43</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-25 12:25:15 +0300</bug_when>
    <thetext>(In reply to comment #42)
&gt; Ну, вообще, syslinux и extlinux - теперь суть один проект.

Код один, а расположение файлов разное, как и назначение. Поэтому exclude нужно делать по разным путям.

Меня устраивает и текущее положение вещей с исключением для /boot. Если вы помните в 37213#c3 мы говорили про общее решение. Exclude я таким не считаю, но всё же это решение, если секции чота парсить неохота.

&gt; ELF у grub2 типа REL, а не DYN и rpmelfsyms их игнорирует.

Ok. Одним меньше.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184579</commentid>
    <comment_count>44</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-25 12:42:14 +0300</bug_when>
    <thetext>(В ответ на комментарий №36)
&gt; Кстати когда ld.so откупоривает эльфа, то он смотрит у него какой-то ABI tag, в
&gt; котором по идее зашита минимальная версия ядра, но вроде еще какие-то поля
&gt; есть.  Может туда прописать что-нибудь неприличное?  Лучше конечно
&gt; кросс-дистрибутивное решение выработать.
&gt;[...]
&gt; Загрузчику тоже неохота парсить секции.  Когда он ищет секцию .note.ABI-tag, то
&gt; он на самом деле не видит имени секции, а только видит PT_NOTE и дальше смотрит
&gt; что там внутри.

Секцию .note.ABI-tag нашел только у запускаемых бинарников. У DSO такой секции нет.
Но наткнулся на вот такие #definе&apos;ы 

#define ELFOSABI_NONE   0
#define ELFOSABI_LINUX  3

коих уже достаточно много: https://ru.wikipedia.org/wiki/Executable_and_Linkable_Format

и подумалось, почему бы не предложить еще одно значение добавить в enum, раз ELF становится популярным в стане загрузчико-писателей. А по этому значению в заголовке отсекать код имеющий право исполнятся в работающей системе от неимеющего.

Опять же странно: неужели проверку на bad_elf_symbols осуществляет только сборочница в Sisyphus? У остальных дистрибутивов &quot;и так сойдет&quot;? 6й syslinux есть как минимум в Arch, Fedora, Debian...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184581</commentid>
    <comment_count>45</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-25 13:22:49 +0300</bug_when>
    <thetext>(In reply to comment #44)
&gt; Секцию .note.ABI-tag нашел только у запускаемых бинарников. У DSO такой секции
&gt; нет.
&gt; Но наткнулся на вот такие #definе&apos;ы 
&gt; 
&gt; #define ELFOSABI_NONE   0
&gt; #define ELFOSABI_LINUX  3

Да, у них они есть и действительно они нигде не проверяют EI_OSABI.

&gt; и подумалось, почему бы не предложить еще одно значение добавить в enum, раз
&gt; ELF становится популярным в стане загрузчико-писателей. А по этому значению в
&gt; заголовке отсекать код имеющий право исполнятся в работающей системе от
&gt; неимеющего.

Вот только это чистейший abuse EI_OSABI. Это поле не имеет отношения к стадии выполнения.
Теперь моя очередь сказать: В общем местечковые конструкции на уровне хэдера ELF мне не нравятся.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184582</commentid>
    <comment_count>46</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-09-25 13:43:37 +0300</bug_when>
    <thetext>(In reply to comment #39)
&gt; Загрузчику тоже неохота парсить секции.  Когда он ищет секцию .note.ABI-tag, то
&gt; он на самом деле не видит имени секции, а только видит PT_NOTE и дальше смотрит
&gt; что там внутри.

OK, давайте запишем, например, __ABI_TAG_OS == -1 в .note.ABI-tag, так даже проще - ld.so не надо будет трогать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184583</commentid>
    <comment_count>47</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2019-09-25 14:24:39 +0300</bug_when>
    <thetext>Написал в рассылку upstream&apos;а. Может быть когда-нибудь узнаем их мнение на счет того, что ELF&apos;ы неразличимы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184584</commentid>
    <comment_count>48</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2019-09-25 14:54:40 +0300</bug_when>
    <thetext>(In reply to comment #46)
&gt; OK, давайте запишем, например, __ABI_TAG_OS == -1 в .note.ABI-tag, так даже
&gt; проще - ld.so не надо будет трогать.

Ок. Значит abuse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192789</commentid>
    <comment_count>49</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2020-09-23 17:34:20 +0300</bug_when>
    <thetext>Как всегда, смотрите в SuSE https://build.opensuse.org/package/show/openSUSE:Factory/syslinux6 .
У них, кстати, syslinux-6.03.99+20171123 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250883</commentid>
    <comment_count>50</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2024-08-30 10:36:14 +0300</bug_when>
    <thetext>Проблема потеряла для меня актуальность с переходом на grub.
Если станет актуальной для модулей в виде ELF-файлов другого проекта - переоткройте.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>