Package: libcamera0.0.3 Version: 0.0.3-4 Severity: normal When a USB camera appears (usbguard allow-device …, or just echo 1 >/sys/…/authorized), the pipewire and/or wireplumber processes sometimes segfault in libcamera. Not always, but doing usbguard block-device followed by usbguard allow-device a couple times makes them crash eventually. I can reproduce this with the integrated camera on two different ThinkPads made a couple years apart, the T25 and P14s Gen2i.
Backtraces from coredumpctl debug follow: Core was generated by `/usr/bin/wireplumber'. Program terminated with signal SIGSEGV, Segmentation fault. #0 std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::_S_left (__x=<optimized out>) at /usr/include/c++/12/bits/stl_function.h:407 407 operator()(const _Tp& __x, const _Tp& __y) const [Current thread is 1 (Thread 0x7fd067eb16c0 (LWP 1508236))] (gdb) bt #0 std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::_S_left(std::_Rb_tree_node_base*) (__x=<optimized out>) at /usr/include/c++/12/bits/stl_function.h:407 #1 std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::_M_lower_bound(std::_Rb_tree_node<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >*, std::_Rb_tree_node_base*, unsigned long const&) (__k=@0x7fd067eaff08: 20736, __y=0x7fd05c002e20, __x=0x21, this=0x7fd05c002e18) at /usr/include/c++/12/bits/stl_tree.h:1952 #2 std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::lower_bound(unsigned long const&) (__k=@0x7fd067eaff08: 20736, this=0x7fd05c002e18) at /usr/include/c++/12/bits/stl_tree.h:1270 #3 std::map<unsigned long, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::lower_bound(unsigned long const&) (__x=@0x7fd067eaff08: 20736, this=0x7fd05c002e18) at /usr/include/c++/12/bits/stl_map.h:1307 #4 std::map<unsigned long, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::operator[](unsigned long const&) (__k=@0x7fd067eaff08: 20736, this=0x7fd05c002e18) at /usr/include/c++/12/bits/stl_map.h:507 #5 libcamera::DeviceEnumeratorUdev::addV4L2Device(unsigned long) (this=0x7fd05c000e10, devnum=<optimized out>) at ../src/libcamera/device_enumerator_udev.cpp:306 #6 0x00007fd075efe10f in libcamera::DeviceEnumeratorUdev::addUdevDevice(udev_device*) (this=0x7fd05c000e10, dev=0x7fd05c0037d0) at ../src/libcamera/device_enumerator_udev.cpp:113 #7 0x00007fd075efed03 in libcamera::DeviceEnumeratorUdev::udevNotify() (this=0x7fd05c000e10) at ../src/libcamera/device_enumerator_udev.cpp:340 #8 0x00007fd075d7092c in libcamera::Signal<>::emit() (this=<optimized out>) at ../include/libcamera/base/signal.h:153 #9 libcamera::EventDispatcherPoll::processNotifiers(std::vector<pollfd, std::allocator<pollfd> > const&) (this=0x7fd05c0012e0, pollfds=<optimized out>) at ../src/libcamera/base/event_dispatcher_poll.cpp:281 #10 0x00007fd075d70dc2 in libcamera::EventDispatcherPoll::processEvents() (this=0x7fd05c0012e0) at ../src/libcamera/base/event_dispatcher_poll.cpp:169 #11 0x00007fd075d79809 in libcamera::Thread::exec() (this=this@entry=0x56119d05f840) at ../src/libcamera/base/thread.cpp:341 #12 0x00007fd075e52507 in libcamera::CameraManager::Private::run() (this=0x56119d05f830) at ../src/libcamera/camera_manager.cpp:122 #13 0x00007fd075ad44a3 in std::execute_native_thread_routine(void*) (__p=0x56119cfa2aa0) at ../../../../../src/libstdc++-v3/src/c++11/thread.cc:82 #14 0x00007fd079377fd4 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442 #15 0x00007fd0793f78d0 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:100 Core was generated by `/usr/bin/pipewire'. Program terminated with signal SIGSEGV, Segmentation fault. #0 std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::_S_left (__x=<optimized out>) at /usr/include/c++/12/bits/stl_function.h:407 407 operator()(const _Tp& __x, const _Tp& __y) const [Current thread is 1 (Thread 0x7fe1d62986c0 (LWP 1507832))] (gdb) bt #0 std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::_S_left (__x=<optimized out>) at /usr/include/c++/12/bits/stl_function.h:407 #1 std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::_M_lower_bound (__k=@0x7fe1d6297008: 20738, __y=0x7fe1cc010f30, __x=0x100000001, this=0x7fe1cc010f28) at /usr/include/c++/12/bits/stl_tree.h:1952 #2 std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::lower_bound (__k=@0x7fe1d6297008: 20738, this=0x7fe1cc010f28) at /usr/include/c++/12/bits/stl_tree.h:1270 #3 std::map<unsigned long, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::lower_bound (__x=@0x7fe1d6297008: 20738, this=0x7fe1cc010f28) at /usr/include/c++/12/bits/stl_map.h:1307 #4 std::map<unsigned long, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::list<libcamera::MediaEntity*, std::allocator<libcamera::MediaEntity*> > > > >::operator[] (__k=@0x7fe1d6297008: 20738, this=0x7fe1cc010f28) at /usr/include/c++/12/bits/stl_map.h:507 #5 libcamera::DeviceEnumeratorUdev::addV4L2Device (this=0x7fe1cc012130, devnum=<optimized out>) at ../src/libcamera/device_enumerator_udev.cpp:306 #6 0x00007fe1d9fa810f in libcamera::DeviceEnumeratorUdev::addUdevDevice (this=0x7fe1cc012130, dev=0x7fe1cc012790) at ../src/libcamera/device_enumerator_udev.cpp:113 #7 0x00007fe1d9fa8d03 in libcamera::DeviceEnumeratorUdev::udevNotify (this=0x7fe1cc012130) at ../src/libcamera/device_enumerator_udev.cpp:340 #8 0x00007fe1da86c92c in libcamera::Signal<>::emit() (this=<optimized out>) at ../include/libcamera/base/signal.h:153 #9 libcamera::EventDispatcherPoll::processNotifiers (this=0x7fe1cc0056b0, pollfds=...) at ../src/libcamera/base/event_dispatcher_poll.cpp:281 #10 0x00007fe1da86cdc2 in libcamera::EventDispatcherPoll::processEvents (this=0x7fe1cc0056b0) at ../src/libcamera/base/event_dispatcher_poll.cpp:169 #11 0x00007fe1da875809 in libcamera::Thread::exec (this=this@entry=0x55a12b795f10) at ../src/libcamera/base/thread.cpp:341 #12 0x00007fe1d9efc507 in libcamera::CameraManager::Private::run (this=0x55a12b795f00) at ../src/libcamera/camera_manager.cpp:122 #13 0x00007fe1d9ad44a3 in std::execute_native_thread_routine (__p=0x55a12b748730) at ../../../../../src/libstdc++-v3/src/c++11/thread.cc:82 #14 0x00007fe1dcd6bfd4 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442 #15 0x00007fe1dcdeb8d0 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:100 -- System Information: Debian Release: bookworm/sid APT prefers stable-security APT policy: (990, 'stable-security'), (990, 'testing'), (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'stable-debug'), (500, 'unstable'), (500, 'stable'), (1, 'experimental-debug'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 5.18.0-4-amd64 (SMP w/4 CPU threads; PREEMPT) Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_CPU_OUT_OF_SPEC, TAINT_USER, TAINT_WARN, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=cs_CZ.UTF-8, LC_CTYPE=cs_CZ.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages libcamera0.0.3:amd64 depends on: ii libc6 2.36-8 ii libdw1 0.188-2.1 ii libgcc-s1 12.2.0-14 ii libgnutls30 3.7.8-4 ii liblttng-ust1 2.13.5-1 ii libstdc++6 12.2.0-14 ii libudev1 252.4-2 ii libunwind8 1.6.2-3 ii libyaml-0-2 0.2.5-1 libcamera0.0.3:amd64 recommends no packages. Versions of packages libcamera0.0.3:amd64 suggests: pn libcamera-ipa <none> -- no debconf information -- Tomáš "liskin" ("Pivník") Janoušek, https://lisk.in/