После установки rpm-plugin-syslog апт падает при попытке выполнить любую транзакцию, таким образом: =8<========================================================================= [Пн дек 3 15:44:32 2018] show_signal_msg: 73 callbacks suppressed [Пн дек 3 15:44:32 2018] apt-get[25378]: segfault at 0 ip 00007fe269c0ac68 sp 00007ffc8423a2c0 error 4 in syslog.so[7fe269c0a000+1000] [Пн дек 3 15:44:32 2018] Code: 00 48 89 c3 e8 99 fc ff ff a8 03 74 06 c7 03 00 00 00 00 48 89 ef e8 e7 fc ff ff 48 8d 3d b0 00 00 00 48 89 c6 b9 02 00 00 00 <f3> a6 0f 97 c0 1c 00 84 c0 74 15 c7 03 00 00 00 00 48 83 c4 08 31 =8<========================================================================= увы, коредамп собрать не получилось.
Воспроизводится на раз. В gdb: Program received signal SIGSEGV, Segmentation fault. syslog_tsm_pre (plugin=plugin@entry=0x4b87220, ts=ts@entry=0x4b6b260) at syslog.c:46 46 if (!rstreq(rpmtsRootDir(ts), "/")) (gdb) bt #0 syslog_tsm_pre (plugin=plugin@entry=0x4b87220, ts=ts@entry=0x4b6b260) at syslog.c:46 #1 0x00007ffff7a829c8 in rpmpluginsCallTsmPre (plugins=0x4b0300, ts=ts@entry=0x4b6b260) at rpmplugins.c:231 #2 0x00007ffff7a7be3a in rpmtsRun (ts=0x4b6b260, okProbs=okProbs@entry=0x0, ignoreSet=<optimized out>) at transaction.c:1507 #3 0x00007ffff7f0ec10 in pkgRPMLibPM::Process (this=0x4876a10, install=..., upgrade=std::vector of length 1, capacity 1 = {...}, uninstall=...) at rpm/rpmpm.cc:1029 #4 0x00007ffff7f106f2 in pkgRPMPM::Go (this=0x4876a10) at rpm/rpmpm.cc:402 #5 0x00007ffff7f4e335 in pkgPackageManager::DoInstall (this=this@entry=0x4876a10) at packagemanager.cc:673 #6 0x0000000000410011 in InstallPackages (Cache=..., ShwKept=<optimized out>, Ask=<optimized out>, Saftey=<optimized out>) at apt-get.cc:497 #7 0x000000000041334a in DoInstall (CmdL=...) at apt-get.cc:1733 #8 0x00007ffff7ee3cce in CommandLine::DispatchArg (this=this@entry=0x7fffffffd9d0, Map=Map@entry=0x7fffffffda10, NoMatch=NoMatch@entry=true) at contrib/cmndline.cc:360 #9 0x00000000004086eb in main (argc=<optimized out>, argv=<optimized out>) at apt-get.cc:2897 (gdb) p ts $1 = (rpmts) 0x4b6b260 (gdb) p ts->rootDir $2 = 0x0 rstreq -- тонкая обёртка над strcmp, которая естественно в NULL'ы не умеет. Вроде бы rpmtsRootDir имеет право возвращать NULL -- в паре мест где она вызывается этот случай обработан явно. Очевидно проблемных места я нашёл два: * plugins/syslog.c:46 * rpmbuild.c:442 -- но тут не упадёт, потому что вначале main у rpmbuild вызывается rpmtsSetRootDir, после которого ts->rootDir NULL'ом быть не может. Похоже, нужно просто добавить проверку на NULL в syslog_tsm_pre.
> Похоже, нужно просто добавить проверку на NULL в syslog_tsm_pre. Например, так: http://git.altlinux.org/people/iv/packages/rpm.git?p=rpm.git;a=commitdiff;h=6c659545d2af01e7683338848c96b5167bf3a8f9
rpm-4.13.0.1-alt8 -> sisyphus: Tue Jun 11 2019 Ivan A. Melnikov <iv@altlinux> 4.13.0.1-alt8 - Fix crash in syslog plugin (closes: #35722). - Fix setting permissions for hardlinked files even if some of the files are skipped (closes: #32997).