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/

Reply via email to