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