Bug 23811 - rpm сегфолтится на верификации пакета kde4libs = 4.4.5-alt2
Summary: rpm сегфолтится на верификации пакета kde4libs = 4.4.5-alt2
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm (show other bugs)
Version: unstable
Hardware: x86 Linux
: P3 major
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-07-26 13:30 MSD by Konstantin Pavlov
Modified: 2010-08-06 21:23 MSD (History)
11 users (show)

See Also:


Attachments
Conflictname, с которым падает (48.00 KB, application/octet-stream)
2010-08-04 13:29 MSD, Sergey V Turchin
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Konstantin Pavlov 2010-07-26 13:30:33 MSD
При проверке пакета kde4libs=4.4.5-alt2 от непривилегированного пользователя происходит segfault:

$ rpm -V kde4libs
zsh: segmentation fault  rpm -V kde4libs

(gdb) bt
#0  0xb7e57980 in strcmp () from /lib/libc.so.6
#1  0xb7da8904 in hashEqualityString () from /usr/lib/librpmdb-4.0.4.so
#2  0xb7da8945 in htGetEntry () from /usr/lib/librpmdb-4.0.4.so
#3  0xb7f792f0 in ?? () from /usr/lib/librpm-4.0.4.so
#4  0xb7f7a3c1 in ?? () from /usr/lib/librpm-4.0.4.so
#5  0xb7f7a727 in ?? () from /usr/lib/librpm-4.0.4.so
#6  0xb7f7a8af in rpmdepCheck () from /usr/lib/librpm-4.0.4.so
#7  0xb7fa2466 in ?? () from /usr/lib/librpm-4.0.4.so
#8  0xb7fa3bbb in showVerifyPackage () from /usr/lib/librpm-4.0.4.so
#9  0xb7f8e797 in showMatches () from /usr/lib/librpm-4.0.4.so
#10 0xb7f902ae in rpmQueryVerify () from /usr/lib/librpm-4.0.4.so
#11 0xb7fa23ab in rpmVerify () from /usr/lib/librpm-4.0.4.so
#12 0x08049ee0 in rpmReadConfigFiles ()
#13 0x0804c440 in ?? ()
#14 0xb7dfdc66 in __libc_start_main () from /lib/libc.so.6
#15 0x08049301 in rpmReadConfigFiles ()
(gdb) 

При запуске этой проверки от root, верификация проходит нормально.
Comment 1 Andrey Rahmatullin 2010-07-26 13:32:54 MSD
В этом же месте оно падает при попытках apt-get dist-upgrade, apt-get install kde4libs и rpm -U kde4libs.rpm
Comment 2 Dmitry V. Levin 2010-07-27 23:29:32 MSD
hsh --init && hsh-install kde4libs у меня не падают ни на i586, ни на x86-64.
hsh-run rpm -V kde4libs тоже не падает.

Давайте найдём ещё какую-нибудь зацепку.
Comment 3 Andrey Rahmatullin 2010-07-27 23:32:33 MSD
Система занимает 2 Гб, могу почистить в несколько раз, видимо :)
Comment 4 Andrey Rahmatullin 2010-07-28 00:02:12 MSD
Жаль, даже полный список пакетов, переустановленный в хэшер с теми же версиями, не помог воспроизвести.
Comment 5 Andrey Rahmatullin 2010-07-28 01:39:12 MSD
Ну в общем это явно порченная какими-то прежними действиями база, баг легко повторяется прямо из hsh-shell с rpm --dbpath, указывающим на порченную базу.

После удаления из тестовой системы нескольких пачек пакетов падение продолжалось, а после ещё нескольких пачек прекратилось. Если из системы удалить только те пакеты, после которых падение прекратилось, оно, разумеется, не прекращается. Так что лично я страдать ерундой прекращаю, а если хочется баг не починить, а воспроизвести с нуля - я пас.
Comment 6 Dmitry V. Levin 2010-07-28 01:47:43 MSD
(In reply to comment #5)
> Ну в общем это явно порченная какими-то прежними действиями база, баг легко
> повторяется прямо из hsh-shell с rpm --dbpath, указывающим на порченную базу.

Если rpmdb испорчена, то rpm может вести себя неадекватно.
Если бы это был единичный случай, то можно было бы всё свалить на локальную порчу rpmdb, но ведь проблема воспроизводилась одновременно у нескольких человек с разным набором установленных пакетов.

> После удаления из тестовой системы нескольких пачек пакетов падение
> продолжалось, а после ещё нескольких пачек прекратилось. Если из системы
> удалить только те пакеты, после которых падение прекратилось, оно, разумеется,
> не прекращается.

Я правильно понял, что после того, как падение прекращалось, возвращение пакетов не возобновляло падение?
Comment 7 Andrey Rahmatullin 2010-07-28 10:31:53 MSD
(В ответ на комментарий №6)
> > После удаления из тестовой системы нескольких пачек пакетов падение
> > продолжалось, а после ещё нескольких пачек прекратилось. Если из системы
> > удалить только те пакеты, после которых падение прекратилось, оно, разумеется,
> > не прекращается.
> Я правильно понял, что после того, как падение прекращалось, возвращение
> пакетов не возобновляло падение?
Я не пробовал, я сразу откатил чрут.
Comment 8 Andrey Rahmatullin 2010-07-28 10:51:37 MSD
(В ответ на комментарий №6)
> Я правильно понял, что после того, как падение прекращалось, возвращение
> пакетов не возобновляло падение?
Возобновляет.
Comment 9 Sergey V Turchin 2010-08-04 13:29:34 MSD
Created attachment 4483 [details]
Conflictname, с которым падает
Comment 10 Andrey Rahmatullin 2010-08-05 11:05:39 MSD
Тут стек с дебагом просят, вот он.

(gdb) bt
#0  0x4efa1980 in strcmp () from /lib/libc.so.6
#1  0xb7f588e5 in hashEqualityString (key1=0xb7cded0c, key2=0x80cea2c) at rpmhash.c:54
#2  0xb7f588b8 in findBucket (ht=0x80c4a50, key=0x80cea2c) at rpmhash.c:46
#3  0xb7f58be5 in htGetEntry (ht=0x80c4a50, key=0x80cea2c, data=0xbfffda40, dataCount=0x0, tableKey=0x0) at rpmhash.c:139
#4  0xb7fa4031 in dbSatisfiesDepend (ts=0x80c41b8, dbProvCache=0x80c4a50, keyName=0x80cea2c "kde4libs", keyEVR=0x80cea35 "4.0.81", keyFlags=2)
    at depends.c:490
#5  0xb7fa42f3 in tsSatisfiesDepend (ts=0x80c41b8, dbProvCache=0x80c4a50, keyType=0xb7fd3f32 "Conflicts", keyDepend=0x8113ad0 "C kde4libs < 4.0.81", 
    keyName=0x80cea2c "kde4libs", keyEVR=0x80cea35 "4.0.81", keyFlags=2) at depends.c:571
#6  0xb7fa49aa in checkPackageDeps (ts=0x80c41b8, psp=0x80848c8, dbProvCache=0x80c4a50, h=0x8178650, keyName=0x80b12ea "kde4libs") at depends.c:691
#7  0xb7fa4d2f in checkDependent (ts=0x80c41b8, psp=0x80848c8, dbProvCache=0x80c4a50, tag=RPMTAG_CONFLICTNAME, key=0x80b12ea "kde4libs") at depends.c:752
#8  0xb7fa4eb2 in rpmdepCheck (ts=0x80c41b8, conflicts=0xbfffdc74, numConflicts=0xbfffdc70) at depends.c:796
#9  0xb7fd361c in verifyDependencies (rpmdb=0x8055eb8, h=0x80c3a48) at verify.c:471
#10 0xb7fd397e in showVerifyPackage (qva=0x804c460, rpmdb=0x8055eb8, h=0x80c3a48) at verify.c:534
#11 0xb7fbda2e in showMatches (qva=0x804c460, mi=0x8088e10, showPackage=0xb7fd38a5 <showVerifyPackage>) at query.c:551
#12 0xb7fbf2a4 in rpmQueryVerify (qva=0x804c460, source=RPMQV_PACKAGE, arg=0xbffff1ec "kde4libs", rpmdb=0x8055eb8, 
    showPackage=0xb7fd38a5 <showVerifyPackage>) at query.c:1019
#13 0xb7fd3ab2 in rpmVerify (qva=0x804c460, source=RPMQV_PACKAGE, arg=0xbffff1ec "kde4libs") at verify.c:567
#14 0x08049f96 in main (argc=5, argv=0xbfffef94) at rpmqv.c:1146
Comment 11 Andrey Rahmatullin 2010-08-05 11:06:44 MSD
key1=0xb7cded0c в 1-м фрейме это мусор.
Для истории: librpm-4.0.4-alt98.39
Comment 12 Andrey Rahmatullin 2010-08-05 11:07:43 MSD
(В ответ на комментарий №11)
> key1=0xb7cded0c в 1-м фрейме это мусор.
Впрочем, это написано по памяти и может быть неправдой.
Comment 13 Repository Robot 2010-08-05 21:59:14 MSD
rpm-4.0.4-alt98.40 -> sisyphus:

* Thu Aug 05 2010 Alexey Tourbin <at@altlinux> 4.0.4-alt98.40
- build/files.c (parseForSimple): Fix potential NULL pointer dereference
  (Dmitry V. Levin, ALT#23813).
- depends.c (dbSatisfiesDepend): Use strdup for dbProvCache keys
  to avoid dangling pointers (ALT#23811).
Comment 14 Andrey Rahmatullin 2010-08-06 21:23:57 MSD
Подтверждаю, починилось на прежней базе.