Skip to content

Bluez 5.71 bluetoothd coredump on a2dp suspend

Description:

Connecting to a voice call with a Bluetooth headset that triggers wireplumber to switch the bluetooth profile from a2dp -> hsp/hfp causes a coredump in bluetoothd, disconnecting the bluetooth headset instead.

Observed with Bose QuietComfort 35 I headphones.

Does not reproduce after downgrading bluez / bluez-libs / bluez-utils 5.71-1 -> 5.70-2.

Additional info:

Utilizing debuginfod, here is the bt:

$ cat gdb.txt 
#0  0x000055e93dbc8785 in a2dp_suspend_complete (session=<optimized out>, err=0, user_data=0x55e93e432520) at profiles/audio/transport.c:431
#1  0x000055e93dbb97ea in finalize_suspend (data=data@entry=0x55e93e435880) at profiles/audio/a2dp.c:376
#2  0x000055e93dbb98c0 in suspend_cfm (session=0x55e93e4317b0, sep=<optimized out>, stream=<optimized out>, err=0x0, user_data=0x55e93e41e850) at profiles/audio/a2dp.c:1276
#3  0x000055e93dbbfa4b in avdtp_suspend_resp (data=0x55e93e431823, size=<optimized out>, stream=0x55e93e433e60, session=0x55e93e4317b0) at profiles/audio/avdtp.c:2900
#4  avdtp_parse_resp (transaction=<optimized out>, size=<optimized out>, buf=0x55e93e431823, signal_id=<optimized out>, stream=0x55e93e433e60, session=0x55e93e4317b0) at profiles/audio/avdtp.c:2985
#5  session_cb (chan=<optimized out>, cond=<optimized out>, data=0x55e93e4317b0) at profiles/audio/avdtp.c:2286
#6  0x00007f5e225b9f69 in g_main_dispatch (context=0x55e93e3c6800) at ../glib/glib/gmain.c:3476
#7  0x00007f5e22618367 in g_main_context_dispatch_unlocked (context=0x55e93e3c6800) at ../glib/glib/gmain.c:4284
#8  g_main_context_iterate_unlocked.isra.0 (context=0x55e93e3c6800, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4349
#9  0x00007f5e225bab97 in g_main_loop_run (loop=0x55e93e3c69e0) at ../glib/glib/gmain.c:4551
#10 0x000055e93dbafe42 in mainloop_run () at src/shared/mainloop-glib.c:66
#11 mainloop_run_with_signal (func=<optimized out>, user_data=0x0) at src/shared/mainloop-notify.c:188
#12 main (argc=<optimized out>, argv=<optimized out>) at src/main.c:1452
  • package version(s):
$ pacman -Qqs bluez | pacman -Q pipewire wireplumber -
pipewire 1:1.0.0-2
wireplumber 0.4.17-1
bluez 5.71-1
bluez-libs 5.71-1
bluez-utils 5.71-1
  • config and/or log files:
$ grep -Ev '^(#|$)' /etc/bluetooth/main.conf # unmodified 
[General]
[BR]
[LE]
[GATT]
[CSIS]
[AVDTP]
[Policy]
[AdvMon]

Steps to reproduce:

  1. Connect bluetooth headset with A2DP profile
  2. Connect to a Discord voice channel, triggering wireplumber to change the bluetooth profile
  3. Headset is disconnected instead, bluetoothd coredumps
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information