ASAN crash in mixer-dsp.c:impl_node_process in pipewire-media-session
ASAN crash in pipewire-media-session:
Seen just after connecting BT headset.
At first sight, not clear what's wrong. The node in question seems to be the mixer of a2dp-sink (adapter):
#7 0x00007f71e467ab0f in impl_node_process (object=0x7f71e4446828) at ../spa/plugins/audiomixer/mixer-dsp.c:725
725 outb->buffer->n_datas = 1;
(gdb) p *this
$5 = {handle = {version = 0, get_interface = 0x7f71e467ab50 <impl_get_interface>, clear = 0x7f71e4677f43 <impl_clear>}, node = {iface = {type = 0x7f71e4696520 "Spa:Pointer:Interface:Node",
version = 0, cb = {funcs = 0x7f71e4699d40 <impl_node>, data = 0x7f71e4446828}}}, log = 0x60d000000080, cpu = 0x60d000000150, cpu_flags = 510939, ops = {fmt = 518, n_channels = 1,
cpu_flags = 2048, clear = 0x7f71e4677ae6 <impl_mix_ops_clear>, process = 0x7f71e46930b0 <mix_f32_avx>, free = 0x7f71e4677ad1 <impl_mix_ops_free>, priv = 0x7f71e469b3b8 <mix_table+24>},
info_all = 0, info = {max_input_ports = 128, max_output_ports = 1, change_mask = 0, flags = 3, props = 0x0, params = 0x0, n_params = 0}, params = {{id = 0, flags = 0, user = 0, padding = {
0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0,
0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {
id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}}, hooks = {list = {next = 0x7f71e44469e0, prev = 0x7f71e44469e0}}, port_count = 1, last_port = 1, in_ports = {{direction = 0,
id = 0, props = {volume = 1, mute = 0}, io = 0x0, info_all = 9, info = {change_mask = 0, flags = 275, rate = {num = 0, denom = 0}, props = 0x0, params = 0x7f71e4446a50, n_params = 5},
params = {{id = 3, flags = 2, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 6, flags = 2, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 7, flags = 2, user = 0, padding = {0, 0, 0, 0, 0}}, {
id = 4, flags = 6, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 5, flags = 2, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {
id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}}, valid = 1, have_format = 1, buffers = {{id = 0, flags = 0,
link = {next = 0x0, prev = 0x0}, buffer = 0x607000269c90, h = 0x7f71e4433000, buf = {n_metas = 0, n_datas = 0, metas = 0x0, datas = 0x0}, datas = {{type = 0, flags = 0, fd = 0,
mapoffset = 0, maxsize = 0, data = 0x0, chunk = 0x0}}, chunk = {{offset = 0, size = 0, stride = 0, flags = 0}}}, {id = 0, flags = 0, link = {next = 0x0, prev = 0x0},
buffer = 0x0, h = 0x0, buf = {n_metas = 0, n_datas = 0, metas = 0x0, datas = 0x0}, datas = {{type = 0, flags = 0, fd = 0, mapoffset = 0, maxsize = 0, data = 0x0, chunk = 0x0}},
chunk = {{offset = 0, size = 0, stride = 0, flags = 0}}} <repeats 63 times>}, n_buffers = 0, queue = {next = 0x7f71e4448960, prev = 0x7f71e4448960}, queued_bytes = 0}, {
direction = 0, id = 0, props = {volume = 0, mute = 0}, io = 0x0, info_all = 0, info = {change_mask = 0, flags = 0, rate = {num = 0, denom = 0}, props = 0x0, params = 0x0,
n_params = 0}, params = {{id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {
0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0,
0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}}, valid = 0, have_format = 0, buffers = {{id = 0,
flags = 0, link = {next = 0x0, prev = 0x0}, buffer = 0x0, h = 0x0, buf = {n_metas = 0, n_datas = 0, metas = 0x0, datas = 0x0}, datas = {{type = 0, flags = 0, fd = 0, mapoffset = 0,
maxsize = 0, data = 0x0, chunk = 0x0}}, chunk = {{offset = 0, size = 0, stride = 0, flags = 0}}} <repeats 64 times>}, n_buffers = 0, queue = {next = 0x0, prev = 0x0},
queued_bytes = 0} <repeats 127 times>}, out_ports = {{direction = 1, id = 0, props = {volume = 0, mute = 0}, io = 0x61c000005e00, info_all = 0, info = {change_mask = 0, flags = 256,
rate = {num = 0, denom = 0}, props = 0x0, params = 0x7f71e4542a50, n_params = 5}, params = {{id = 3, flags = 2, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 6, flags = 2, user = 0,
padding = {0, 0, 0, 0, 0}}, {id = 7, flags = 2, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 4, flags = 6, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 5, flags = 2, user = 0,
padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0, flags = 0, user = 0,
padding = {0, 0, 0, 0, 0}}}, valid = 1, have_format = 1, buffers = {{id = 0, flags = 0, link = {next = 0x7f71e4544960, prev = 0x7f71e4544960}, buffer = 0x62d0000a0420,
h = 0x62d0000a0470, buf = {n_metas = 0, n_datas = 0, metas = 0x0, datas = 0x0}, datas = {{type = 0, flags = 0, fd = 0, mapoffset = 0, maxsize = 0, data = 0x7f71e4544ac0,
chunk = 0x7f71e4542bc0}}, chunk = {{offset = 0, size = 32768, stride = 4, flags = 0}}}, {id = 0, flags = 0, link = {next = 0x0, prev = 0x0}, buffer = 0x0, h = 0x0, buf = {
n_metas = 0, n_datas = 0, metas = 0x0, datas = 0x0}, datas = {{type = 0, flags = 0, fd = 0, mapoffset = 0, maxsize = 0, data = 0x0, chunk = 0x0}}, chunk = {{offset = 0, size = 0,
stride = 0, flags = 0}}} <repeats 63 times>}, n_buffers = 0, queue = {next = 0x7f71e4544960, prev = 0x7f71e4544960}, queued_bytes = 0}}, n_formats = 2, format = {
media_type = 1, media_subtype = 2, info = {raw = {format = SPA_AUDIO_FORMAT_F32P, flags = 0, rate = 0, channels = 0, position = {0 <repeats 64 times>}}, dsp = {
format = SPA_AUDIO_FORMAT_F32P}}}, stride = 4, have_format = 1, started = 0, empty = {0 <repeats 8256 times>}}
(gdb) up
#8 0x00007f71e9fed6ac in process_node (data=0x61d000190a80) at ../src/pipewire/impl-node.c:1032
1032 spa_node_process(p->mix);
(gdb) p *this
$6 = {context = 0x618000000080, link = {next = 0x618000000170, prev = 0x618000000170}, global = 0x60b0003eac70, global_listener = {link = {next = 0x60b0003eac98, prev = 0x60b0003eac98},
cb = {funcs = 0x7f71ea0e47c0 <global_events>, data = 0x61d000190a80}, removed = 0x0, priv = 0x0}, properties = 0x606000071120, info = {id = 18, max_input_ports = 64,
max_output_ports = 0, change_mask = 0, n_input_ports = 2, n_output_ports = 2, state = PW_NODE_STATE_RUNNING, error = 0x0, props = 0x606000071120, params = 0x61d000190b20, n_params = 6},
params = {{id = 3, flags = 2, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 1, flags = 3, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 2, flags = 7, user = 0, padding = {0, 0, 0, 0, 0}}, {
id = 4, flags = 6, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 10, flags = 2, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 11, flags = 6, user = 0, padding = {0, 0, 0, 0, 0}}, {id = 0,
flags = 0, user = 0, padding = {0, 0, 0, 0, 0}} <repeats 26 times>}, name = 0x604000059e50 "bluez_output.00_00_AB_CD_7A_DE.a2dp-sink", priority_driver = 1010, group_id = 4294967295,
spa_flags = 25, registered = 1, active = 1, live = 0, driver = 1, exported = 1, remote = 0, driving = 1, visited = 0, want_driver = 0, passive = 1, port_user_data_size = 0, driver_link = {
next = 0x6180000001d0, prev = 0x6180000001d0}, driver_node = 0x61d000190a80, follower_list = {next = 0x61d000190f68, prev = 0x61d000190f68}, follower_link = {next = 0x61d000190f58,
prev = 0x61d000190f58}, sort_link = {next = 0x7ffc93106d40, prev = 0x7ffc93106d40}, node = 0x7f71e473b840, listener = {link = {next = 0x7f71e473bb88, prev = 0x7f71e473bb88}, cb = {
funcs = 0x7f71ea0e4760 <node_events>, data = 0x61d000190a80}, removed = 0x0, priv = 0x0}, input_ports = {next = 0x61c000004880, prev = 0x61c000005880}, input_port_map = {items = {
data = 0x6150000abe80, size = 16, alloc = 512, extend = 64}, free_list = 4294967295}, output_ports = {next = 0x61c000005080, prev = 0x61c000006080}, output_port_map = {items = {
data = 0x6150000ac100, size = 16, alloc = 512, extend = 64}, free_list = 4294967295}, listener_list = {list = {next = 0x61d0001911e0, prev = 0x7f71e4737a48}},
data_loop = 0x604000000490, latency = {num = 512, denom = 48000}, quantum_size = 512, max_latency = {num = 0, denom = 0}, max_quantum_size = 0, source = {loop = 0x62d00000a440,
func = 0x7f71e9fe8f21 <node_on_fd_events>, data = 0x61d000190a80, fd = 42, mask = 25, rmask = 1}, activation = 0x60800002efa0, rt = {clock = 0x7f71e4739230, position = 0x7f71e4739230,
activation = 0x7f71e46ad000, target_list = {next = 0x61d0001910a8, prev = 0x61d0001910a8}, driver_target = {link = {next = 0x0, prev = 0x0}, node = 0x0, activation = 0x0,
signal = 0x7f71e9fed3f6 <process_node>, data = 0x0, active = 0}, input_mix = {next = 0x61c000004eb8, prev = 0x61c000005eb8}, output_mix = {next = 0x61c0000056b8,
prev = 0x61c0000066b8}, target = {link = {next = 0x0, prev = 0x0}, node = 0x61d000190a80, activation = 0x7f71e4739000, signal = 0x7f71e9fed3f6 <process_node>, data = 0x61d000190a80,
active = 0}, driver_link = {next = 0x0, prev = 0x0}, rate_limit = {interval = 2000000000, begin = 0, burst = 1, n_printed = 0, n_missed = 0}}, user_data = 0x61d0001911c0}