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

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

    <bug>
          <bug_id>33356</bug_id>
          
          <creation_ts>2017-04-11 01:20:49 +0300</creation_ts>
          <short_desc>Fatal Python error: getentropy() failed Ошибка сегментирования</short_desc>
          <delta_ts>2017-04-12 16:12:25 +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>python3</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vitaly Lipatov">lav</reporter>
          <assigned_to name="Grigory Ustinov">grenka</assigned_to>
          <cc>evg</cc>
    
    <cc>george</cc>
    
    <cc>glebfm</cc>
    
    <cc>grenka</cc>
    
    <cc>imz</cc>
    
    <cc>kotopesutility</cc>
    
    <cc>vitty</cc>
    
    <cc>vseleznv</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>163134</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2017-04-11 01:20:49 +0300</bug_when>
    <thetext>После обновления до
* Ср мар 22 2017 Vladimir D. Seleznev &lt;vseleznv@altlinux.org&gt; 3.5.1-alt7.qa1
- NMU: rebuilt against Tcl/Tk 8.6.

получил
$ python3
Fatal Python error: getentropy() failed
Ошибка сегментирования</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163135</commentid>
    <comment_count>1</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2017-04-11 03:14:35 +0300</bug_when>
    <thetext>Проблема в отсутствии на
$ uname -a
Linux pbf64.office.etersoft.ru 2.6.32-ovz-el-alt147 #1 SMP Fri Oct 28 17:45:13 UTC 2016 x86_64 GNU/Linux

системного вызова:
getrandom(0x8e05f0, 24, 0)              = -1 ENOSYS (Function not implemented)
write(2, &quot;Fatal Python error: getentropy()&quot;..., 40Fatal Python error: getentropy() failed
) = 40

Ошибка должна воспроизводится с
$ strace -e fault=getrandom python3

У меня подозрение, что новый glibc предоставил обёртку для getrandom приложению,
а приложение не может корректно обработать ошибку вызова этой функции.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163136</commentid>
    <comment_count>2</comment_count>
    <who name="Vladimir D. Seleznev">vseleznv</who>
    <bug_when>2017-04-11 03:26:53 +0300</bug_when>
    <thetext>$ uname -r
4.9.18-std-def-alt1
$ rpm -q glibc 
glibc-2.25-alt2.x86_64
$ python3
Python 3.5.1 (default, Apr  7 2017, 11:25:29)
[GCC 6.3.1 20170118 (ALT 6.3.1-alt2)] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&gt;&gt;&gt; ^D
$ strace -o /dev/null -e fault=getrandom python3
Fatal Python error: getentropy() failed
zsh: segmentation fault  strace -o /dev/null -e fault=getrandom python3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163138</commentid>
    <comment_count>3</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2017-04-11 08:48:27 +0300</bug_when>
    <thetext>(In reply to comment #1)
&gt; Проблема в отсутствии на
&gt; $ uname -a
&gt; Linux pbf64.office.etersoft.ru 2.6.32-ovz-el-alt147 #1 SMP Fri Oct 28 17:45:13
&gt; UTC 2016 x86_64 GNU/Linux
&gt; 
&gt; системного вызова:
&gt; getrandom(0x8e05f0, 24, 0)              = -1 ENOSYS (Function not implemented)
&gt; write(2, &quot;Fatal Python error: getentropy()&quot;..., 40Fatal Python error:
&gt; getentropy() failed
&gt; ) = 40
&gt; 
&gt; Ошибка должна воспроизводится с
&gt; $ strace -e fault=getrandom python3
&gt; 
&gt; У меня подозрение, что новый glibc предоставил обёртку для getrandom
&gt; приложению,
&gt; а приложение не может корректно обработать ошибку вызова этой функции.

По-моему, python3 даже в некотором смысле обработал эту ошибку (ведь кто-то написал: Fatal Python error), но он написан так, что считает, что эта функция в нормальной ситуации не возвращает ошибку.

Если верно предположение о том, что вызывается обёртка над системным вызовом из glibc, получается, что glibc считает нормальным вернуть ошибку (и пусть приложение разбирается), а приложение считает, что ненормально (и glibc должна была сама разобраться, раз уж предоставило такое API). Какое поведение функции из glibc более правильное?

(Интересно: а тесты же python3 проходили в сборочнице. Там какое-то другое ядро?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163139</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2017-04-11 09:07:24 +0300</bug_when>
    <thetext>Просто в Сизифе старый глючный питон, не рассчитанный на современные ядра и glibc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163140</commentid>
    <comment_count>5</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2017-04-11 09:41:07 +0300</bug_when>
    <thetext>(In reply to comment #2)
&gt; $ uname -r
&gt; 4.9.18-std-def-alt1
&gt; $ rpm -q glibc 
&gt; glibc-2.25-alt2.x86_64
&gt; $ python3
&gt; Python 3.5.1 (default, Apr  7 2017, 11:25:29)
&gt; [GCC 6.3.1 20170118 (ALT 6.3.1-alt2)] on linux
&gt; Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&gt; &gt;&gt;&gt; ^D
&gt; $ strace -o /dev/null -e fault=getrandom python3
&gt; Fatal Python error: getentropy() failed
&gt; zsh: segmentation fault  strace -o /dev/null -e fault=getrandom python3

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

Я подумал, что функция в glibc стала возвращать ошибку на более старых ядрах (дело не в неадаптированности python3 к новым ядрам), либо python3 после пересборки стал вызывать другую функцию из glibc, которая возвращает ошибку на более старых ядрах (недоделка в python3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163151</commentid>
    <comment_count>6</comment_count>
    <who name="Vladimir D. Seleznev">vseleznv</who>
    <bug_when>2017-04-11 17:26:32 +0300</bug_when>
    <thetext>(In reply to comment #4)
&gt; Просто в Сизифе старый глючный питон, не рассчитанный на современные ядра и
&gt; glibc.

В Сизифе как раз достаточно свежие питоны (и я не знаю версии питонов, которые будучи собранными в окружении с современными ядрами и glibc, не работали с ними). Проблема проявляется, как я понял, на openvz-ядрах с glibc-2.25. Похоже, что-то поменялось в поведении glibc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163173</commentid>
    <comment_count>7</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2017-04-12 16:12:25 +0300</bug_when>
    <thetext>python3-3.5.1-alt8 -&gt; sisyphus:

* Tue Apr 11 2017 Gleb F-Malinovskiy &lt;glebfm@altlinux&gt; 3.5.1-alt8
- Fixed interpreter breakage caused by rebuild with glibc &gt;= 2.25
  (closes: #33356).</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>