Summary: | kcmshell kamera падает в libusb | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Andrey Rahmatullin <wrar> | ||||
Component: | libgphoto2 | Assignee: | Dmitriy Khanzhin <jinn> | ||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||
Severity: | critical | ||||||
Priority: | P2 | CC: | ab, jinn, zerg | ||||
Version: | unstable | ||||||
Hardware: | all | ||||||
OS: | Linux | ||||||
Attachments: |
|
Description
Andrey Rahmatullin
2008-09-22 09:33:05 MSD
Можно показать права на /dev/bus/usb/001/001 и окружающие каталоги? И еще вывод команды id для пользователя, под которым идет работа. Похоже, у пользователя нет прав доступа к этому устройству, надо соответствующий блок настройки прав для udev добавить. Ну, до обновления libusb этого не было. А kamera в любом случае пользует только libgphoto2 (In reply to comment #1) > Можно показать права на /dev/bus/usb/001/001 и окружающие каталоги? $ l -R /dev/bus/usb/ /dev/bus/usb/: итого 0 drwxr-xr-x 2 root root 80 Сен 19 20:50 002/ drwxr-xr-x 2 root root 60 Сен 19 20:50 001/ drwxr-xr-x 4 root root 80 Сен 11 20:59 ./ drwxr-xr-x 3 root root 60 Сен 11 20:59 ../ /dev/bus/usb/002: итого 0 drwxr-xr-x 2 root root 80 Сен 19 20:50 ./ drwxr-xr-x 4 root root 80 Сен 11 20:59 ../ crw-r--r-- 1 root root 189, 128 Сен 11 20:59 001 crw-r--r-- 1 root root 189, 129 Сен 11 16:59 002 /dev/bus/usb/001: итого 0 drwxr-xr-x 2 root root 60 Сен 19 20:50 ./ drwxr-xr-x 4 root root 80 Сен 11 20:59 ../ crw-r--r-- 1 root root 189, 0 Сен 11 20:59 001 > И еще вывод команды id для пользователя, под которым идет работа. $ id uid=500(zerg) gid=500(zerg) группы=10(wheel),19(proc),22(cdrom),36(scanner),67(camera),71(floppy),74(hashman),80(cdwriter),81(audio),83(radio),104(xgrp),500(zerg),526(zerg_h1a),527(zerg_h1b),544(vboxusers) У меня падает Дело в том, что это поведение libusb 0.1 некорректно по отношению к тому, что можно сделать с устройствами USB на шине. Поведение исправлено в 0.9.3 и libusb-compat, а приложения будем исправлять. Код плагина usb в libgphoto некорректен -- он не должен падать от недоступности прав для сканирования шины. Другие приложения, использующие новую libusb-compat 0.1, не падают. Плагин надо исправлять и я это сделаю. Итак, нашел: libgphoto2-2.4.2/libgphoto2_port/usb/libusb.c: 782 devh = usb_open (dev); 783 /* get string descriptor at 0xEE */ 784 ret = usb_get_descriptor (devh, 0x03, 0xee, buf, sizeof(buf)); usb_open() может вернуть NULL, если не удалось открыть устройство. Дальше usb_get_descriptor ожидает, что devh будет непустым, вот эту ситуацию нужно обрабатывать. Простейшее исправление будет if (!devh) return 0; Created attachment 2942 [details]
Patch to fix NULL-pointer dereference
Приблизительное исправление (not tested).
Спасибо. Я пересобрал libgphoto2 с патчем, падения прекратились. Однако все равно ругается, что ей нужен доступ на запись. В ближайшем будущем наверное надо повесить багу в апстрим. (In reply to comment #7) > Спасибо. > Я пересобрал libgphoto2 с патчем, падения прекратились. > Однако все равно ругается, что ей нужен доступ на запись. > В ближайшем будущем наверное надо повесить багу в апстрим. > Он будет ругаться, это нормально, это предупреждение. В апстрим нужно только этот патч отправить. Чтобы совсем избавиться совсем от предупреждения, нужно полностью переписать код libgphoto2_port/usb/libusb.c на использование нового libusb-1. Я бы поставил эту задачу в более низкий приоритет, который станет важен где-то к концу года, когда выйдет libusb-1 1.0. Пофиксил же, а отметиться забыл. Fixed. |