Re: NginX крошится с libperl-5.30
Maxim Dounin
mdounin на mdounin.ru
Ср Июл 3 00:18:37 UTC 2019
Hello!
On Sat, Jun 29, 2019 at 08:00:59PM +0300, Vadim A. Misbakh-Soloviov wrote:
> Поправка: оно не падает в таком положении (даже на той машине) ТОЛЬКО если
> цепляться по -p (без дебага, замечу, падает. Так что странно).
>
> Попробовал запустить напрямую под gdb, получил такое:
>
> ```
> #0 0x00007ffff492d0c7 in raise () from /lib64/libc.so.6
> #1 0x00007ffff492eaf9 in abort () from /lib64/libc.so.6
> #2 0x00007ffff49242a9 in ?? () from /lib64/libc.so.6
> #3 0x00007ffff4924331 in __assert_fail () from /lib64/libc.so.6
> #4 0x00007ffff4e1d28f in S__invlist_len (invlist=0x555555ea8078) at
> invlist_inline.h:49
[...]
> #11 0x00007ffff4e5d0d2 in S_reg (my_perl=0x555555dd5c60,
> pRExC_state=0x7fffffff8da0, paren=0, flagp=0x7fffffff8ad8, depth=1) at
> regcomp.c:12088
> #12 0x00007ffff4e3ebf7 in Perl_re_op_compile (my_perl=0x555555dd5c60,
> patternp=0x0, pat_count=1, expr=0x555555dee908, eng=0x7ffff532b9a0
> <PL_core_reg_engine>, old_re=0x0, is_bare_re=0x0, orig_rx_flags=0,
> pm_flags=1073741824) at regcomp.c:7705
Всё это по прежнему выгядит как падение собственно перла в
процессе компиляции регулярного выражения. Судя по:
> #16 0x00007ffff500f64e in S_require_file (my_perl=0x555555dd5c60,
> sv=0x555555b9ce10) at pp_ctl.c:4322
> #17 0x00007ffff500f7aa in Perl_pp_require (my_perl=0x555555dd5c60) at
> pp_ctl.c:4346
и по:
> #26 0x00007ffff500f64e in S_require_file (my_perl=0x555555dd5c60,
> sv=0x555555e35038) at pp_ctl.c:4322
> #27 0x00007ffff500f7aa in Perl_pp_require (my_perl=0x555555dd5c60) at
> pp_ctl.c:4346
в процессе загрузки какого-то модуля, видимо второго по
вложенности. С учётом того, что при создании perl-интерпретатора
nginx автоматически загружает модуль nginx - видимо, падение
вызывает что-то, что подтягивается из nginx.pm. Там в свою
очередь используются Exporter и XSLoader, но ничего нетривиального
в них не видно. Впрочем, это может быть и что-то из site-local
загрузки.
Для начала, наверное, имеет смысл разобраться, что именно за
регулярное выражение падает, и из какого именно файла. Ну а
дальше - смотреть соответствующие коммиты/тикеты в перле,
воспроизводить и так далее.
Впрочем, если перл в nginx'е не используется - проще всего
perl-модуль убрать из сборки и заб(ы|и)ть.
[...]
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru