modem-broadband: ignore late callbacks

System Internals / NetworkManager - Lubomir Rintel [v3.sk] - 10 May 2016 09:52 UTC

If libmm invokes callbacks after the connect context has been disposed we should just ignore them. Fixes crash on dereferencing already freed connect context (due to explicit disconnection while the modem is connecting):

NetworkManager[29074]: [1462383917.8718] (ttyACM1): modem state changed, 'disconnecting' --> 'registered' (reason: user-requested) NetworkManager[29074]: [1462383917.8719] (ttyACM1): modem state changed, 'registered' --> 'connecting' (reason: user-requested) NetworkManager[29074]: [1462383917.8720] device (ttyACM1): state change: deactivating -> disconnected (reason 'connection-removed') [110 30 38] NetworkManager[29074]: [1462383917.8758] (ttyACM1): modem state changed, 'connecting' --> 'disconnecting' (reason: user-requested) NetworkManager[29074]: [1462383917.8909] (ttyACM1): failed to connect modem: Dial operation has been cancelled

(NetworkManager:29074): NetworkManager-wwan-CRITICAL **: modem_prepare_result: assertion 'state == NM_DEVICE_STATE_PREPARE' failed NetworkManager[29074]: [1462383917.8912] (ttyACM1): modem state changed, 'disconnecting' --> 'registered' (reason: user-requested) NetworkManager[29074]: [1462383917.8913] (ttyACM1): modem state changed, 'registered' --> 'connecting' (reason: user-requested) NetworkManager[29074]: [1462383917.9693] (ttyACM1): modem state changed, 'connecting' --> 'registered' (reason: user-requested)

Program received signal SIGSEGV, Segmentation fault. connect_ready (simple_iface=, res=0x7fffe0009200, self=0x555555a8d670 [NMModemBroadband]) at nm-modem-broadband.c:329 329 if (!ctx->first_error) { (gdb) bt #0 0x00007fffea01272a in connect_ready (simple_iface=, res=0x7fffe0009200, self=0x555555a8d670 [NMModemBroadband]) at nm-modem-broadband.c:329 #1 0x00007ffff546a297 in g_simple_async_result_complete (simple=0x7fffe0009200 [GSimpleAsyncResult]) at gsimpleasyncresult.c:801 #2 0x00007fffe9d82fec in connect_context_complete_and_free (ctx=ctx@entry=0x7fffdc00c550) at mm-modem-simple.c:93 #3 0x00007fffe9d83155 in simple_connect_ready (self=0x7fffdc00c960 [MMModemSimple], res=0x555555a7c2b0, ctx=0x7fffdc00c550) at mm-modem-simple.c:159 #4 0x00007ffff547af93 in g_task_return_now (task=0x555555a7c2b0 [GTask]) at gtask.c:1106 #5 0x00007ffff547b62e in g_task_return (task=0x555555a7c2b0 [GTask], type=) at gtask.c:1164 #6 0x00007ffff54d4239 in reply_cb (connection=, res=, user_data=0x555555a7c2b0) at gdbusproxy.c:2570 #7 0x00007ffff547af93 in g_task_return_now (task=0x7fffdc004470 [GTask]) at gtask.c:1106 #8 0x00007ffff547b62e in g_task_return (task=0x7fffdc004470 [GTask], type=) at gtask.c:1164 #9 0x00007ffff54c8c9f in g_dbus_connection_call_done (source=, result=0x7fffe00036f0, user_data=0x7fffdc004470) at gdbusconnection.c:5702 #10 0x00007ffff547af93 in g_task_return_now (task=0x7fffe00036f0 [GTask]) at gtask.c:1106 #11 0x00007ffff547afc9 in complete_in_idle_cb (task=0x7fffe00036f0) at gtask.c:1120 #12 0x00007ffff4eb7d7a in g_main_context_dispatch (context=0x555555a4a000) at gmain.c:3152 #13 0x00007ffff4eb7d7a in g_main_context_dispatch (context=context@entry=0x555555a4a000) at gmain.c:3767 #14 0x00007ffff4eb80b8 in g_main_context_iterate (context=0x555555a4a000, block=block@entry=1, dispatch=dispatch@entry=1, self=) at gmain.c:3838 #15 0x00007ffff4eb838a in g_main_loop_run (loop=0x555555a48780) at gmain.c:4032 #16 0x00005555555aebf2 in main (argc=1, argv=0x7fffffffdc78) at main.c:477 (gdb)

aa0b379 modem-broadband: ignore late callbacks
src/devices/wwan/nm-modem-broadband.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)

Upstream: cgit.freedesktop.org


  • Share