[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:33404] [FYI] glibc-2.32 breaks install tools



こじま@メンテナMLの方には投げたけど、ハマる人がいると申しわけないんでこっちにも、です。

最近、手元で GCC-10.2.0 や glibc-2.32 を試しているものの、
glibc-2.32 では、それ以前バージョンの glibc でビルドした
static link なコマンドが一部動作しないようで、
その結果、installpkg/updatepkg/removepkg が動作不能になるようです。

Plamo Linuxの場合、インストール用ツールはshell scriptなので、
そのままではインストール用ツールが使っているコマンド(例えば tar)を
インストール用ツールで更新することができません。

# 缶切りが缶詰の中、状態になる。

そのため、インストール用ツールは /sbin/install/ 以下に用意した
専用のコマンドのみを使うようにしており、これら専用のコマンドは、
主に busybox 由来のstatic link なバイナリとして用意しています。

# 具体的にはこんな感じ

$ ls /sbin/installer/
[*         bzip2*  cp*      dirname*  gzip*   mv*        rmdir*  tar*    wc*
basename*  cat*    cut*     echo*     ln*     paste*     sed*    tee*    xz*
busybox*   chmod*  date*    expr*     ls*     readlink*  sh*     touch*  xzcat*
bzcat*     comm*   dialog*  grep*     mkdir*  rm*        sort*   uniq*   zcat*

これらのコマンドはここ数年使い続けているものの、
glibc-2.32 な環境では "ls -l" が segfault するようです。

$ ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 12  8月  7日  16:46 /lib/libc.so.6 -> libc-2.32.so*

$ /sbin/installer_org/ls -l .
Segmentation fault

dmesg にはこんなログが。

[ 6001.101927] ls[1350]: segfault at e5 ip 00007f5e4e382f90 sp 00007fff151afc70 error 4 in libc-2.32.so[7f5e4e26d000+167000]
[ 6001.106179] Code: ff 48 85 c0 0f 84 9d 00 00 00 41 80 3c 24 ff 0f 85 b8 00 00 00 48 8b 05 56 0e 0a 00 49 0f be 16 4c 89 f5 64 48 8b 08 48 89 d0 <f6> 44 51 01 20 74 1c 66 0f 1f 84 00 00 00 00 00 48 0f be 55 01 48

いやらしいことに "-l" オプションを指定しないと動く。

$ /sbin/installer_org/ls .
busybox		busybox-1.32.0.tar.bz2	busybox_commands.tar  busybox_glibc-2.31
busybox-1.32.0	busybox.config		busybox_coms.tar      busybox_unstripped

glibc-2.31 では大丈夫で、glibc-2.32 環境でもバイナリをビルドし直すと
問題なく動くので、どうやら glibc-2.32 で追加された何かが static binary の
互換性を損なっている感じ。

$ gdb ls
GNU gdb (GDB) 8.0
Copyright (C) 2017 Free Software Foundation, Inc.
....
Reading symbols from ls...done.
(gdb) run -l
Starting program: /home/kojima/ls -l

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff77d6f90 in __nss_readline () from /lib/libc.so.6

この __ns_readline() というのは、ChangeLog.21 で

2020-07-21  Florian Weimer  <fweimer@xxxxxxxxxx>

        COMMIT: bdee910e88006ae33dc83ac3d2c0708adb6627d0
        nss: Add __nss_fgetent_r

        * include/nss_files.h: Modified.
        (libc_hidden_proto): Modified.
        (libc_hidden_proto): Modified.
        (libc_hidden_proto): Modified.
        (libc_hidden_proto): Modified.
        (__nss_readline): New function.
        (__nss_readline_seek): New function.
        (__nss_parse_line_result): New function.
        (libc_hidden_proto): New.
        (libc_hidden_proto): New.
        (__nss_fgetent_r): New function.
        * nss/Makefile: Modified.
        * nss/Versions: Modified.
        * nss/nss_fgetent_r.c: New file.
        * nss/nss_files/files-XXX.c: Modified.
        (internal_getent): Modified function.
        * nss/nss_parse_line_result.c: New file.
        * nss/nss_readline.c: New file.

と、つい最近 glibc に追加されたコードなようで、このあたりが原因かなぁ、、
と想像しているものの、具体的な対策は思いついていません。

---------
こじま


Follow-Ups
[plamo:33405] Re: [FYI] glibc-2.32 breaks install tools, KOJIMA Mitsuhiro
[plamo:33407] Re: [FYI] glibc-2.32 breaks install tools, KOJIMA Mitsuhiro

[検索ページ] [メール一覧]
Plamo ML 公開システム