usbutils-0.73-alt1 4442 open("/dev/bus/usb", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 4442 open("/proc/bus/usb", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 4442 open("/sys/bus/usb/devices", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 4442 --- SIGSEGV (Segmentation fault) @ 0 (0) --- 4442 +++ killed by SIGSEGV +++
Присылайте патчи, тестировать на машине без USB не могу.
Воспроизводится в qemu
0.81 проверь.
branch-5.0 теперь не интересен. В Sisyphus всё тоже-самое. После установки в kvm, падает.
да, падает версия 0.86
lsusb не лазит в файлы само.
.
Падает оно, потому что lsusb не обрабатывает код возврата от usb_init() из libusb. Т.е. - libusb конечно виновато, но не так что бы очень. Вот тут: usb_init(); usb_find_busses(); usb_find_devices();
(В ответ на комментарий №8) > Падает оно, потому что lsusb не обрабатывает код возврата от usb_init() из > libusb. void usb_init(void);
да, тогда все вопросы внутрь libusb
Проблема тут в том, что API, используемое lsusb -- это старое API libusb, предоставляемое libusb-compat. В этом API нет возможности сообщить о провале инициализации: API_EXPORTED void usb_init(void) { int r; usbi_dbg(""); if (!ctx) { r = libusb_init(&ctx); if (r < 0) { usbi_err("initialization failed!"); return; } /* usb_set_debug can be called before usb_init */ if (usb_debug) libusb_set_debug(ctx, 3); } } Как результат, внутренний (общий для всех пользователей libusb-compat) контекст ctx будет NULL, но это не должно создавать проблему, поскольку указание пустого контекста внутри libusb (не libusb-compat!) означает использование "контекста по умолчанию"). Соответственно, проблемы в ошибочной инициализации в usb_init() не должны приводить к падению приложения. А вот проверять код возврата usb_find_busses() необходимо. Делает ли это lsusb?
нет, не проверяет. Но и падает оно внутри usb_find_busses()
В таком случае необходимо сделать две вещи: 1. Продемонстрировать мне, где конкретно оно падает (у меня не воспроизводится). 2. Исправить код в lsusb, чтобы он правильно работал с libusb-compat API. В идеале, usbutils нужно перевести на текущее API libusb. Старое уже практически не поддерживается никем.
(В ответ на комментарий №13) > 2. Исправить код в lsusb, чтобы он правильно работал с libusb-compat API. > > В идеале, usbutils нужно перевести на текущее API libusb. Старое уже > практически не поддерживается никем. Это к KH. Я могу написать ему и в linux-usb@, в принципе.
Учитывая, что usbutils относительно простой и пример основы lsusb есть в lsusb-1.0.5/examples/, можно переписать самостоятельно. Посмотрим.
KH ответил, что версии для libusb-1.0 не будет, будет для libudev: http://github.com/gregkh/lsusb.git/
То есть, lsusb перестанет зависить от libusb-compat в частности и libusb в целом? В таком случае предлагаю закрыть эту ошибку как только usbutils будут обновлены до версии с поддержкой libudev.
usbutils v008 собраны с поддержкой udev.