diary/Kojima

・GCC-4.8.3 bug

GCC-4.8.3でGlibc-2.20をビルド、インストールしてみたところ、64ビット環境では問題ないものの、VirtualBoxで動かしている32ビット環境でコンソールからログインできなくなってしまった。

あれれ、と思って外部からsshで接続すると問題なくログインできる。「???」となりながら、ログファイルを調べてみると、postfixのログにこんなメッセージが残っている。

Oct 15 17:44:19 vm51_32 postfix/master[3087]: 
 warning: /usr/libexec/postfix/pickup: bad command startup -- throttling
Oct 15 17:45:19 vm51_32 postfix/pickup[3983]: 
 fatal: setgid(16): Function not implemented
Oct 15 17:45:20 vm51_32 postfix/master[3087]: 
 warning: process /usr/libexec/postfix/pickup pid 3983 exit status 1

「なぜにsetgid?」と首をひねりながら、しばらく調べてみると、Glibc-2.20のリリース情報にこんな記述が。

3.1.22. x86 (32-bit, Linux)

Some GCC releases miscompile the setxid support code in NPTL. 
This results in functions such as setgid failing with ENOSYS 
because an totally bogus system call number is being passed to 
the kernel. This has been fixed as GCC bug 61801.

Build system: x86_64 GNU/Linux, gcc version 4.8.3 20140624 
(Red Hat 4.8.3-1  (GCC), GNU assembler version 2.23.2 
(x86_64-redhat-linux) using BFD version version 2.23.2, 
Linux 3.15.3-200.fc20.x86_64 (Carlos O'Donell). 
Built with -m32' and targetting i686-pc-linux-gnu'.

どうやらこれっぽいな、とGCCのバグ情報を調べてみると、条件を一つ追加しているだけだった。

ホントにこれだけで直るのか?と疑問に思ったので、パッチをあててないGCC-4.8.3とパッチ済みでGlibc-2.20をビルドして、make checkしたところ、パッチ前のGCCでは

FAIL: nptl/tst-setuid3
FAIL: rt/tst-cpuclock2
Summary of test results:
      2 FAIL
   1667 PASS
    120 XFAIL
      4 XPASS

だったのに対し、パッチ済みだと、

Summary of test results:
   1669 PASS
    120 XFAIL
     4 XPASS

となった。「なるほど」とビルドし直したglibc-2.20にアップデートしたところ、コンソールからログインできない問題も無事解決。

よくこんなの見つけたなぁ、、と思う反面、glibcのテストスーツでちゃんとチェックできていたことを見ると、やはり make check は必須かと反省。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:42