Bug 21313

Summary: segfault due to missing error handling
Product: Sisyphus Reporter: Michael Shigorin <mike>
Component: libusbAssignee: Valery Inozemtsev <shrek>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: mike, shaba, shrek
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://lists.altlinux.org/pipermail/sisyphus/2009-August/341338.html
Bug Depends on:    
Bug Blocks: 30940, 31292    

Description Michael Shigorin 2009-08-31 14:20:36 MSD
При попытке использования утилиты sispmtcl с ключом -s под ядром 2.6.18-ovz-rhel-alt7 она сегфолтится:

$ strace sispmctl -o 1
......
open("/sys/bus/usb/devices", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
getdents(3, /* 14 entries */, 32768)    = 384
stat("/sys/bus/usb/devices/1-1/descriptors", 0x7fff9270a8a0) = -1 ENOENT (No such file or directory)
open("/sys/bus/usb/devices/1-1/busnum", O_RDONLY) = -1 ENOENT (No such file or directory)
close(3)                                = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) --- 
+++ killed by SIGSEGV +++

http://lists.altlinux.org/pipermail/sisyphus/2009-August/341192.html

Дальнейшее разбирательство в sisyphus@ показало, что проблема в недостаточной обработке ошибок в libusb{,-compat}:

(gdb) bt
#0  0x00002b7d2e6b2b9f in usbi_log (ctx=0x0, level=LOG_LEVEL_ERROR, function=0x2b7d2e6bb810 "sysfs_get_device_list", 
    format=0x2b7d2e6bb1e0 "opendir devices failed errno=%d") at core.c:1431
#1  0x00002b7d2e6b824e in sysfs_get_device_list (ctx=0x0, _discdevs=0x7fff7cb6b050, usbfs_fallback=0x7fff7cb6b00c)
    at os/linux_usbfs.c:924
#2  0x00002b7d2e6b837a in op_get_device_list (ctx=0x0, _discdevs=0x7fff7cb6b050) at os/linux_usbfs.c:963
#3  0x00002b7d2e6b1ade in libusb_get_device_list (ctx=0x0, list=0x7fff7cb6b098) at core.c:560
#4  0x00002b7d2e15af28 in usb_find_busses () from /lib64/libusb-0.1.so.4 
#5  0x000000000040185c in ?? ()
#6  0x00002b7d2e37c9dd in __libc_start_main () from /lib64/libc.so.6

Это NULL dereference в usbi_log() из libusb.
Вызов libusb_init() завершился неудачно, в результате чего
usbi_default_context остался непроинициализированным.
Остальной код libusb на это не рассчитывает.

Короче говоря, надо исправить обработку ошибок в libusb.

-- 
ldv
Comment 1 Alexander Bokovoy 2009-08-31 22:55:13 MSD
Assigning.
Comment 2 Michael Shigorin 2015-09-11 15:36:53 MSK
Возможно, связанное:

pcscd: pcscd startup succeeded
kernel: [17235.180530] usb 1-2: USB disconnect, device number 6
pcscd: ccid_usb.c:638:WriteUSB() write failed (1/6): -4 No such device
kernel: [17239.514262] usb 1-2: new full-speed USB device number 7 using xhci_hcd
mtp-probe: checking bus 1, device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2"
mtp-probe: bus: 1, device: 7 was not an MTP device
kernel: [17239.717704] pcscd[10402]: segfault at 7fa970ff6f48 ip 00007fa970ff6f48 sp 00007fa970fe6d30 error 14 in libgpg-error.so.0.16.0[7fa971418000+11000]

Ребята из Rutoken говорят, что это известная проблема libusb-1.0.19, которую уже победили и достаточно обновить пакет.
Comment 3 Alexey Shabalin 2015-09-14 14:36:19 MSK
сегодня зарелизили libusb 1.0.20
Comment 4 Michael Shigorin 2015-09-19 13:31:15 MSK
Отправил собираться задание 149383 -- если нет возражений против
http://git.altlinux.org/people/mike/packages/?p=libusb.git;a=commitdiff;h=73a324cb092f281feee71392b24523324fbe8330
то прошу пропустить.

Технической возможности проверить с sispmctl уже нет, но известно (comment 2), что между 1.0.19 и 1.0.20 проводилась работа над обработкой ошибок.
Comment 5 Repository Robot 2015-09-21 18:13:09 MSK
libusb-1.0.20-alt1 -> sisyphus:

* Sat Sep 19 2015 Michael Shigorin <mike@altlinux> 1.0.20-alt1
- 1.0.20 (closes: #21313)
- minor spec cleanup