Summary: | Роняет apt-get с SIGSEGV | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Evgenii Terechkov <evg> |
Component: | rpm-plugin-syslog | Assignee: | placeholder <placeholder> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | critical | ||
Priority: | P3 | CC: | at, glebfm, imz, iv, ldv, placeholder, sotor, vt |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Evgenii Terechkov
2018-12-04 08:00:29 MSK
Воспроизводится на раз. В 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 |