Bug 17264 - kcmshell kamera падает в libusb
Summary: kcmshell kamera падает в libusb
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: libgphoto2 (show other bugs)
Version: unstable
Hardware: all Linux
: P2 critical
Assignee: Dmitriy Khanzhin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-09-22 09:33 MSD by Andrey Rahmatullin
Modified: 2008-12-10 07:27 MSK (History)
3 users (show)

See Also:


Attachments
Patch to fix NULL-pointer dereference (511 bytes, patch)
2008-09-22 23:14 MSD, Alexander Bokovoy
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Rahmatullin 2008-09-22 09:33:05 MSD
$ kcmshell kamera
libusb couldn't open USB device /dev/bus/usb/001/001: Permission denied.
libusb requires write access to USB device nodes.
KCrash: Application 'kcmshell' crashing...

[KCrash handler]
#5  0xb7bb9369 in usb_get_descriptor () from /usr/lib/libusb-0.1.so.4
#6  0xb7c3069f in ?? () from /usr/lib/libgphoto2_port/0.8.0/usb.so
#7  0x00000000 in ?? ()
Comment 1 Alexander Bokovoy 2008-09-22 11:06:01 MSD
Можно показать права на /dev/bus/usb/001/001 и окружающие каталоги?
И еще вывод команды id для пользователя, под которым идет работа.

Похоже, у пользователя нет прав доступа к этому устройству, надо соответствующий блок настройки прав для udev добавить.
Comment 2 Sergey V Turchin 2008-09-22 15:01:01 MSD
Ну, до обновления libusb этого не было.
А kamera в любом случае пользует только libgphoto2
Comment 3 Sergey V Turchin 2008-09-22 15:03:38 MSD
(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)

У меня падает
Comment 4 Alexander Bokovoy 2008-09-22 15:30:35 MSD
Дело в том, что это поведение libusb 0.1 некорректно по отношению к тому, что можно сделать с устройствами USB на шине. Поведение исправлено в 0.9.3 и libusb-compat, а приложения будем исправлять.

Код плагина usb в libgphoto некорректен -- он не должен падать от недоступности прав для сканирования шины. Другие приложения, использующие новую libusb-compat 0.1, не падают. Плагин надо исправлять и я это сделаю.
Comment 5 Alexander Bokovoy 2008-09-22 23:01:52 MSD
Итак, нашел:
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;
Comment 6 Alexander Bokovoy 2008-09-22 23:14:21 MSD
Created attachment 2942 [details]
Patch to fix NULL-pointer dereference

Приблизительное исправление (not tested).
Comment 7 Dmitriy Khanzhin 2008-09-23 06:55:26 MSD
Спасибо.
Я пересобрал libgphoto2 с патчем, падения прекратились.
Однако все равно ругается, что ей нужен доступ на запись.
В ближайшем будущем наверное надо повесить багу в апстрим.
Comment 8 Alexander Bokovoy 2008-09-23 07:24:28 MSD
(In reply to comment #7)
> Спасибо.
> Я пересобрал libgphoto2 с патчем, падения прекратились.
> Однако все равно ругается, что ей нужен доступ на запись.
> В ближайшем будущем наверное надо повесить багу в апстрим.
> 
Он будет ругаться, это нормально, это предупреждение. В апстрим нужно только этот патч отправить. Чтобы совсем избавиться совсем от предупреждения, нужно полностью переписать код libgphoto2_port/usb/libusb.c на использование нового libusb-1. Я бы поставил эту задачу в более низкий приоритет, который станет важен где-то к концу года, когда выйдет libusb-1 1.0.
Comment 9 Dmitriy Khanzhin 2008-12-10 07:27:19 MSK
Пофиксил же, а отметиться забыл.
Fixed.