Bug 19423 - Падает при отсутствии usb
Summary: Падает при отсутствии usb
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: usbutils (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Alexey Shabalin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-04-01 10:42 MSD by Anton Farygin
Modified: 2015-11-05 01:39 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Farygin 2009-04-01 10:42:49 MSD
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 +++
Comment 1 Andrey Rahmatullin 2009-04-06 20:18:40 MSD
Присылайте патчи, тестировать на машине без USB не могу.
Comment 2 Anton Farygin 2009-04-06 23:42:26 MSD
Воспроизводится в qemu
Comment 3 Andrey Rahmatullin 2009-04-27 22:32:20 MSD
0.81 проверь.
Comment 4 Anton Farygin 2009-12-26 13:30:13 MSK
branch-5.0 теперь не интересен.

В Sisyphus всё тоже-самое. После установки в kvm, падает.
Comment 5 Anton Farygin 2009-12-26 13:31:01 MSK
да, падает версия 0.86
Comment 6 Andrey Rahmatullin 2009-12-26 13:40:46 MSK
lsusb не лазит в файлы само.
Comment 7 Alexander Bokovoy 2009-12-26 13:45:22 MSK
.
Comment 8 Anton Farygin 2009-12-26 14:17:19 MSK
Падает оно, потому что lsusb не обрабатывает код возврата от usb_init() из libusb.

Т.е. - libusb конечно виновато, но не так что бы очень.

Вот тут:
usb_init();

usb_find_busses();
usb_find_devices();
Comment 9 Andrey Rahmatullin 2009-12-26 14:21:22 MSK
(В ответ на комментарий №8)
> Падает оно, потому что lsusb не обрабатывает код возврата от usb_init() из
> libusb.
void usb_init(void);
Comment 10 Anton Farygin 2009-12-26 14:22:52 MSK
да, тогда все вопросы внутрь libusb
Comment 11 Alexander Bokovoy 2009-12-26 14:47:27 MSK
Проблема тут в том, что 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?
Comment 12 Anton Farygin 2009-12-26 14:54:53 MSK
нет, не проверяет.

Но и падает оно внутри usb_find_busses()
Comment 13 Alexander Bokovoy 2009-12-26 14:59:08 MSK
В таком случае необходимо сделать две вещи:
1. Продемонстрировать мне, где конкретно оно падает (у меня не воспроизводится).
2. Исправить код в lsusb, чтобы он правильно работал с libusb-compat API.

В идеале, usbutils нужно перевести на текущее API libusb. Старое уже практически не поддерживается никем.
Comment 14 Andrey Rahmatullin 2009-12-26 17:30:03 MSK
(В ответ на комментарий №13)
> 2. Исправить код в lsusb, чтобы он правильно работал с libusb-compat API.
> 
> В идеале, usbutils нужно перевести на текущее API libusb. Старое уже
> практически не поддерживается никем.
Это к KH. Я могу написать ему и в linux-usb@, в принципе.
Comment 15 Alexander Bokovoy 2009-12-26 18:34:35 MSK
Учитывая, что usbutils относительно простой и пример основы lsusb есть в lsusb-1.0.5/examples/, можно переписать самостоятельно. Посмотрим.
Comment 16 Andrey Rahmatullin 2009-12-28 05:18:17 MSK
KH ответил, что версии для libusb-1.0 не будет, будет для libudev: http://github.com/gregkh/lsusb.git/
Comment 17 Alexander Bokovoy 2009-12-28 08:55:14 MSK
То есть, lsusb перестанет зависить от libusb-compat в частности и libusb в целом?
В таком случае предлагаю закрыть эту ошибку как только usbutils будут обновлены до версии с поддержкой libudev.
Comment 18 Alexey Shabalin 2015-11-05 01:39:59 MSK
usbutils v008 собраны с поддержкой udev.