--- Begin Message ---
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/
--- End Message ---