Blame SOURCES/1008-wifi-avoid-crash-due-to-incomplete-Wi-Fi-API-info-rh1866395.patch

146a1d
From c71d29b3dbe13d6ce456200d9e8ce9d0739eb368 Mon Sep 17 00:00:00 2001
146a1d
From: Thomas Haller <thaller@redhat.com>
146a1d
Date: Mon, 3 Aug 2020 09:54:04 +0200
146a1d
Subject: [PATCH 1/1] wifi: avoid crash due to incomplete Wi-Fi API info
146a1d
146a1d
In this case, GetAll failed with "Timeout was reached". We still
146a1d
create a dummy BSS info, because we kept track of the object to
146a1d
start with. That way, we don't simply want to ignore the failure,
146a1d
because NMDeviceWifi might track this NMWifiAP already, and we may
146a1d
need an update (even if we failed to fetch the requested information).
146a1d
146a1d
However, that later leads to a crash, because NMDeviceWifi expect the BSSID
146a1d
present then.
146a1d
146a1d
Avoid that, by don't processing such APs.
146a1d
146a1d
    #0  g_logv (log_domain=0x7f2ac10a60a9 "NetworkManager", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=<optimized out>) at ../glib/gmessages.c:1377
146a1d
    #1  0x00007f2acf152233 in g_log
146a1d
        (log_domain=log_domain@entry=0x7f2ac10a60a9 "NetworkManager", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7f2acf1a46ff "%s: assertion '%s' failed")
146a1d
        at ../glib/gmessages.c:1415
146a1d
    #2  0x00007f2acf152a2d in g_return_if_fail_warning
146a1d
        (log_domain=log_domain@entry=0x7f2ac10a60a9 "NetworkManager", pretty_function=pretty_function@entry=0x7f2ac10a9e70 <__func__.50> "try_fill_ssid_for_hidden_ap", expression=expression@entry=0x7f2ac10a86d0 "bssid") at ../glib/gmessages.c:2771
146a1d
    #3  0x00007f2ac108a402 in try_fill_ssid_for_hidden_ap (ap=0x5569978b61c0 [NMWifiAP], self=0x55699786ea00 [NMDeviceWifi]) at src/devices/wifi/nm-device-wifi.c:1883
146a1d
    #4  supplicant_iface_bss_changed_cb (iface=0x556997777260 [NMSupplicantInterface], bss_info=0x7f2ab4028f00, is_present=1, self=0x55699786ea00 [NMDeviceWifi])
146a1d
        at src/devices/wifi/nm-device-wifi.c:1946
146a1d
    #5  0x00007f2ace246af0 in ffi_call_unix64 () at ../src/x86/unix64.S:76
146a1d
    #6  0x00007f2ace2462ab in ffi_call (cif=cif@entry=0x7ffd9c107c90, fn=fn@entry=0x7f2ac1089e80 <supplicant_iface_bss_changed_cb>, rvalue=<optimized out>, avalue=avalue@entry=0x7ffd9c107ba0)
146a1d
        at ../src/x86/ffi64.c:525
146a1d
    #7  0x00007f2acf23e87a in g_cclosure_marshal_generic_va
146a1d
        (closure=<optimized out>, return_value=<optimized out>, instance=<optimized out>, args_list=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=<optimized out>) at ../gobject/gclosure.c:1614
146a1d
    #8  0x00007f2acf23dae6 in _g_closure_invoke_va
146a1d
        (closure=closure@entry=0x5569978a0cc0, return_value=return_value@entry=0x0, instance=instance@entry=0x556997777260, args=args@entry=0x7ffd9c107f00, n_params=2, param_types=0x55699775b990) at ../gobject/gclosure.c:873
146a1d
    #9  0x00007f2acf2566e9 in g_signal_emit_valist (instance=0x556997777260, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7ffd9c107f00) at ../gobject/gsignal.c:3407
146a1d
    #10 0x00007f2acf256c63 in g_signal_emit (instance=instance@entry=0x556997777260, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3554
146a1d
    #11 0x00005569972ece61 in _bss_info_changed_emit (self=self@entry=0x556997777260 [NMSupplicantInterface], bss_info=bss_info@entry=0x7f2ab4028f00, is_present=is_present@entry=1)
146a1d
        at src/supplicant/nm-supplicant-interface.c:555
146a1d
    #12 0x00005569972ed3a0 in _bss_info_properties_changed (self=0x556997777260 [NMSupplicantInterface], bss_info=0x7f2ab4028f00, properties=<optimized out>, initial=<optimized out>)
146a1d
        at src/supplicant/nm-supplicant-interface.c:758
146a1d
    #13 0x00005569972f756b in _bss_info_get_all_cb (result=0x0, error=<optimized out>, user_data=0x7f2ab4028f00) at src/supplicant/nm-supplicant-interface.c:784
146a1d
    #14 0x0000556997217bc1 in _nm_dbus_connection_call_default_cb (source=0x5569977480c0 [GDBusConnection], res=<optimized out>, user_data=user_data@entry=0x556997855d50)
146a1d
        at shared/nm-glib-aux/nm-dbus-aux.c:74
146a1d
    #15 0x00007f2acf339e4a in g_task_return_now (task=task@entry=0x7f2ab4003f00 [GTask]) at ../gio/gtask.c:1214
146a1d
    #16 0x00007f2acf33aa3d in g_task_return (task=0x7f2ab4003f00 [GTask], type=<optimized out>) at ../gio/gtask.c:1283
146a1d
    #17 0x00007f2acf33b4fe in g_task_return (type=G_TASK_RETURN_ERROR, task=<optimized out>) at ../gio/gtask.c:1861
146a1d
    #18 g_task_return_error (task=<optimized out>, error=<optimized out>) at ../gio/gtask.c:1867
146a1d
    #19 0x0000556997893f40 in  ()
146a1d
    #20 0x3a85d39adfae7f00 in  ()
146a1d
    #21 0x00007f2ab4003cc0 in  ()
146a1d
    #22 0x00007f2acf396460 in g_dbus_connection_call_done () at ../gio/gdbusconnection.c:2059
146a1d
    #23 0x00007f2ab4003f00 in  ()
146a1d
    #24 0x0000000000000086 in  ()
146a1d
    #25 0x0000000000000018 in  ()
146a1d
    #26 0x00007f2acf339e4a in g_task_return_now (task=0x7f2ab4003f00 [GTask], task@entry=0x7f2ab4003cc0 [GTask]) at ../gio/gtask.c:1214
146a1d
    #27 0x00007f2acf33aa3d in g_task_return (task=0x7f2ab4003cc0 [GTask], type=<optimized out>) at ../gio/gtask.c:1283
146a1d
    #28 0x00007f2acf33b4fe in g_task_return (type=G_TASK_RETURN_ERROR, task=<optimized out>) at ../gio/gtask.c:1861
146a1d
    #29 g_task_return_error (task=<optimized out>, error=<optimized out>) at ../gio/gtask.c:1867
146a1d
    #30 0x0000003000000028 in  ()
146a1d
    #31 0x00007ffd9c108290 in  ()
146a1d
146a1d
Fixes: b83f07916a54 ('supplicant: large rework of wpa_supplicant handling')
146a1d
(cherry picked from commit 4d878d7012cd9dc031682ef5e5b025081427325b)
146a1d
(cherry picked from commit 029d07b019ea6532fbf6f8db03efb648f0931625)
146a1d
---
146a1d
 src/devices/wifi/nm-device-wifi.c | 7 +++++++
146a1d
 1 file changed, 7 insertions(+)
146a1d
146a1d
diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c
146a1d
index 2d97f9b117a2..2a3428861737 100644
146a1d
--- a/src/devices/wifi/nm-device-wifi.c
146a1d
+++ b/src/devices/wifi/nm-device-wifi.c
146a1d
@@ -1937,6 +1937,13 @@ supplicant_iface_bss_changed_cb (NMSupplicantInterface *iface,
146a1d
 	} else {
146a1d
 		gs_unref_object NMWifiAP *ap = NULL;
146a1d
 
146a1d
+		if (!bss_info->bssid_valid) {
146a1d
+			/* We failed to initialize the info about the AP. This can
146a1d
+			 * happen due to an error in the D-Bus communication. In this case
146a1d
+			 * we ignore the info. */
146a1d
+			return;
146a1d
+		}
146a1d
+
146a1d
 		ap = nm_wifi_ap_new_from_properties (bss_info);
146a1d
 
146a1d
 		/* Let the manager try to fill in the SSID from seen-bssids lists */
146a1d
-- 
146a1d
2.26.2
146a1d