Summary: | [3.5.10-alt4] kcontrol падает при запуске kcmshell mouse | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Konstantin Baev <kipruss> | ||||||
Component: | kdebase-kcontrol | Assignee: | Nobody's working on this, feel free to take it <nobody> | ||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||
Severity: | major | ||||||||
Priority: | P2 | CC: | ab | ||||||
Version: | unstable | ||||||||
Hardware: | all | ||||||||
OS: | Linux | ||||||||
Attachments: |
|
Description
Konstantin Baev
2008-09-26 17:30:01 MSD
Вывод от gdb там есть какой-нибудь? А то у меня не падает. (In reply to comment #1) > Вывод от gdb там есть какой-нибудь? А то у меня не падает. > Я это в виртуалке увидел, а там gdb не установлено. А на хосте у меня alt1 и пока что-то обновляться боюсь. :) Сегодня не успею, а в понедельник или, может, в выходные, если получится, я выдам что говорит gdb. В strace ничего интересного не увидел. И, возможно, не падает из за версии. Падает именно версия alt4 Причина скорее всего где-то в другом месте. В X-ах, например Created attachment 2962 [details]
Логи падения kcmshell
Прикладываю лог вывода gdm из виртуалбокса. Хост я обновил только что - не обнаружил ошибки. Возможно, это из-за виртуалбокса или ещё из-за чего-нибудь.
Понижаю багу в звании. 100 пудов, связано с новой libusb, но бага скорее всего в kde Саш! Судя по тому, что kde зависит от libusb-0.1.so.4, а в трейсе libusb-1.0.so.0, то это наверняка libusb-0.1.so.4 виноват? Скорее всего проблема в KDE в коде, который перебирает USB устройства. Смотри место, где вызывается usb_open() -- наверняка там нет проверки, что usb_open() вернул NULL. В http://websvn.kde.org/trunk/KDE/kdebase/workspace/kcontrol/input/ я вижу нормальную обработку usb_open() в logitechmouse.cpp. Есть ли еще места в KDE, где используется libusb? Да, usb_open только там. А usb_close(NULL) не падает? (In reply to comment #8) > Есть ли еще места в KDE, где используется libusb? apt-cache whatdepends libusb-0.1.so.4 ничего не находит, кроме аналогичного в KDE4 KDE-шный просмотр устройств парсит /sys/bys/usb/devices API_EXPORTED int usb_close(usb_dev_handle *dev) { usbi_dbg(""); libusb_close(dev->handle); free(dev); return 0; } Как видишь, крайне легко падает. Предлагаю вставить везде в KDE проверку на NULL при usb_close(), в частности, в KDE/kdebase/workspace/kcontrol/input/logitechmouse.cpp: 111 : LogitechMouse::~LogitechMouse() 112 : { 113 : usb_close( m_usbDeviceHandle ); 114 : } Конечно, можно будет и в libusb-compat этот кусок кода поправить, но тогда такие ошибки будут скрываться. В libsub 1.0 они снова вылезут, потому что там предполагается, что за целостностью указателей должна следить вызывающая программа (и это правильно). (In reply to comment #11) > вставить везде в KDE проверку на NULL при usb_close() ok [...] > предполагается, что за целостностью указателей должна следить вызывающая > программа (и это правильно). IMHO если на производительность не влияет, то зря Решил добавить небольшой патч, который предотвращает падение при usb_close(NULL) в libusb. Это должно помочь KDE и прочим, но сам по себе факт некорректной работы с нераспределенными структурами является поводом переписать код приложения. 2 kipruss: А какая мышь, кстати? (In reply to comment #14) > 2 kipruss: > А какая мышь, кстати? > Мышь - PS/2 A4Tech, 2X Quick Mouse Model: OP-3D Проверьте с kdebase-3.5.10 > alt4 или libusb-0.9.3 > alt0 В них одинаковая проверка добавлена. (In reply to comment #16) > Проверьте с kdebase-3.5.10 > alt4 или libusb-0.9.3 > alt0 > В них одинаковая проверка добавлена. > [kipruss@localhost ~]$ rpm -q kdebase-kcontrol kdebase-kcontrol-3.5.10-alt6 [kipruss@localhost ~]$ rpm -q libusb libusb-0.9.3-alt3.0 [kipruss@localhost ~]$ kcmshell mouse KCrash: Application 'kcmshell' crashing... Не могу воспроизвести. Что дает strace -e trace -o log.txt kcmshell mouse ? Приложите сюда log.txt. У меня ожидаемая последовательность при работе с USB шиной (мыши на шине нет, только сканер отпечатков): open("/dev/bus/usb", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 12 stat64("/sys/bus/usb/devices", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0 open("/sys/bus/usb/devices", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 12 stat64("/sys/bus/usb/devices/usb1/descriptors", {st_mode=S_IFREG|0444, st_size=65553, ...}) = 0 open("/sys/bus/usb/devices/usb1/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb1/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb1/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 12 open("/sys/bus/usb/devices/usb1/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb1/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb1/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/001/003", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb1/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/001/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb2/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/002/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb3/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/003/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb4/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/004/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb5/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/005/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb6/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/006/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb7/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/007/001", O_RDONLY) = -1 EACCES (Permission denied) Created attachment 2971 [details]
лог strace
[kipruss@localhost ~]$ strace -e trace -o log1.txt kcmshell mouse
strace: invalid system call `trace'
лог вызова
$ strace -o log1.txt kcmshell mouse
прилагается
Ещё раз напоминаю, что ошибка воспроизводится на ОС внутри Virtualbox OSE. А там usb нет в принципе.
|