Arch Linux

Please read this before reporting a bug:
https://wiki.archlinux.org/title/Bug_reporting_guidelines

Do NOT report bugs when a package is just outdated, or it is in the AUR. Use the 'flag out of date' link on the package page, or the Mailing List.

REPEAT: Do NOT report bugs for outdated packages!
Tasklist

FS#42567 - [lirc-utils] lircd recieves segfault on USB-device disconnect.

Attached to Project: Arch Linux
Opened by Dikiy (dikiy) - Sunday, 26 October 2014, 17:09 GMT
Last edited by Lukas Fleischer (lfleischer) - Tuesday, 20 January 2015, 22:43 GMT
Task Type Bug Report
Category Upstream Bugs
Status Closed
Assigned To Lukas Fleischer (lfleischer)
Architecture All
Severity Medium
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No

Details

Description:

lircd segfaults if I disconnect an USB-disk.

Additional info:
I have an USB IR-reciever, driven with atilibusb.

* package versions
lirc-utils 0.9.1.a-7
libusb 1.0.19-1

* config and/or log files etc.
core-dump included


Steps to reproduce:
1. start lircd through systemctl: sudo systemctl start lircd
2. start irexec (from user): irexec -d
3. connect the USB-hard-drive (it will automounts through udiskie+udisks2)
4. unmount the drive
5. plug out the drive.
   core.xz (43.6 KiB)
   dmesg.txt (2.8 KiB)
This task depends upon

Closed by  Lukas Fleischer (lfleischer)
Tuesday, 20 January 2015, 22:43 GMT
Reason for closing:  No response
Comment by Dikiy (dikiy) - Sunday, 26 October 2014, 17:17 GMT
some info from gdb:

warning: Could not load shared library symbols for linux-gate.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Core was generated by `/usr/bin/lircd --driver=atilibusb --device=/dev/lirc0 --nodaemon'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0xb7583536 in pthread_mutex_lock () from /usr/lib/libpthread.so.0
(gdb) backtrace
#0 0xb7583536 in pthread_mutex_lock () from /usr/lib/libpthread.so.0
#1 0xb7325cff in libusb_unref_device () from /usr/lib/libusb-1.0.so.0
#2 0xb732a04c in ?? () from /usr/lib/libusb-1.0.so.0
#3 0xb732ab47 in libusb_handle_events_timeout_completed () from /usr/lib/libusb-1.0.so.0
#4 0xb732acbd in libusb_handle_events_completed () from /usr/lib/libusb-1.0.so.0
#5 0xb732b5f0 in ?? () from /usr/lib/libusb-1.0.so.0
#6 0xb732b6e2 in ?? () from /usr/lib/libusb-1.0.so.0
#7 0xb759867f in ?? () from /usr/lib/libusb-0.1.so.4
#8 0x0805bd80 in ?? ()
#9 0x0804d4c9 in ?? ()
#10 0x080511be in ?? ()
#11 0x080513da in ?? ()
#12 0x0804bae9 in ?? ()
#13 0xb73b0e5e in __libc_start_main () from /usr/lib/libc.so.6
#14 0x0804bb0a in ?? ()
Comment by Lukas Fleischer (lfleischer) - Wednesday, 29 October 2014, 09:11 GMT
Please recompile with debugging symbols and file an upstream report.
Comment by Dikiy (dikiy) - Friday, 31 October 2014, 14:53 GMT
backtrace with debug symbols enabled:

Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Core was generated by `/usr/bin/lircd --driver=atilibusb --device=/dev/lirc0 --nodaemon'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0xb7574536 in pthread_mutex_lock () from /usr/lib/libpthread.so.0
(gdb) backtrace
#0 0xb7574536 in pthread_mutex_lock () from /usr/lib/libpthread.so.0
#1 0xb7341cff in libusb_unref_device () from /usr/lib/libusb-1.0.so.0
#2 0xb734604c in ?? () from /usr/lib/libusb-1.0.so.0
#3 0xb7346b47 in libusb_handle_events_timeout_completed () from /usr/lib/libusb-1.0.so.0
#4 0xb7346cbd in libusb_handle_events_completed () from /usr/lib/libusb-1.0.so.0
#5 0xb73475f0 in ?? () from /usr/lib/libusb-1.0.so.0
#6 0xb73476e2 in ?? () from /usr/lib/libusb-1.0.so.0
#7 0xb758967f in ?? () from /usr/lib/libusb-0.1.so.4
#8 0x08059e90 in usb_read_loop (fd=8) at hw_atilibusb.c:301
#9 0x08059b03 in ati_init () at hw_atilibusb.c:155
#10 0x0804c506 in add_client (sock=4) at lircd.c:705
#11 0x0804fd9c in waitfordata (maxusec=0) at lircd.c:2012
#12 0x0804fe8a in loop () at lircd.c:2032
#13 0x0805091d in main (argc=4, argv=0xbffa0054) at lircd.c:2408
Comment by Dikiy (dikiy) - Friday, 31 October 2014, 15:24 GMT
So. I compiled libusb and libusb-compat with debug symbols:

#0 0xb75ad536 in pthread_mutex_lock () from /usr/lib/libpthread.so.0
(gdb) backtrace
#0 0xb75ad536 in pthread_mutex_lock () from /usr/lib/libpthread.so.0
#1 0xb737eb2a in libusb_unref_device (dev=0xb6700e90) at core.c:1001
#2 0xb738351f in handle_events (ctx=ctx@entry=0x9ec3040, tv=tv@entry=0xbfba8978) at io.c:2056
#3 0xb73840b9 in libusb_handle_events_timeout_completed (ctx=ctx@entry=0x9ec3040, tv=tv@entry=0xbfba89b8,
completed=completed@entry=0xbfba8a5c) at io.c:2174
#4 0xb738420b in libusb_handle_events_completed (ctx=ctx@entry=0x9ec3040, completed=completed@entry=0xbfba8a5c) at io.c:2273
#5 0xb7384be2 in sync_transfer_wait_for_completion (transfer=transfer@entry=0x9ec5150) at sync.c:50
#6 0xb7384ccc in do_sync_bulk_transfer (dev_handle=0x9ec50e0, endpoint=<optimized out>, buffer=0xbfba8ae7 "\024]\210",
length=5, transferred=0xbfba8aac, timeout=60000, type=3 '\003') at sync.c:179
#7 0xb738514a in libusb_interrupt_transfer (dev_handle=<optimized out>, endpoint=<optimized out>, data=<optimized out>,
data@entry=0xbfba8ae7 "\024]\210", length=<optimized out>, length@entry=5, transferred=<optimized out>,
transferred@entry=0xbfba8aac, timeout=timeout@entry=60000) at sync.c:305
#8 0xb75c257f in usb_interrupt_io (ep=<optimized out>, bytes=0xbfba8ae7 "\024]\210", size=5, timeout=60000, dev=<optimized out>)
at core.c:810
#9 0x08059e90 in usb_read_loop (fd=8) at hw_atilibusb.c:301
#10 0x08059b03 in ati_init () at hw_atilibusb.c:155
#11 0x0804c506 in add_client (sock=4) at lircd.c:705
#12 0x0804fd9c in waitfordata (maxusec=0) at lircd.c:2012
#13 0x0804fe8a in loop () at lircd.c:2032
#14 0x0805091d in main (argc=4, argv=0xbfba8e84) at lircd.c:2408.

--------------------------------
And I found something new out: if I plug in the device, _then_ start lircd daemon + irexec, and then plug the device out, the lircd does not crash.
Comment by Dikiy (dikiy) - Friday, 31 October 2014, 15:43 GMT
Comment by Lukas Fleischer (lfleischer) - Friday, 31 October 2014, 16:01 GMT
  • Field changed: Category (Packages: Extra → Upstream Bugs)
Thanks, this looks helpful.
Comment by Lukas Fleischer (lfleischer) - Tuesday, 13 January 2015, 21:57 GMT
Any news here?

Loading...