3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-25 17:59:25 +01:00

diagnostic: Fix crash with Open networks

It isn't safe to return a NULL from diagnostic_akm_suite_to_security()
since the value is used directly.  Also, if the AKM suite is 0, this
implies that the network is an Open network and not some unknown AKM.

==17982== Invalid read of size 1
==17982==    at 0x483BC92: strlen (vg_replace_strmem.c:459)
==17982==    by 0x47DE60: _dbus1_builder_append_basic (dbus-util.c:981)
==17982==    by 0x41ACB2: dbus_append_dict_basic (dbus.c:197)
==17982==    by 0x412050: station_get_diagnostic_cb (station.c:3614)
==17982==    by 0x405B19: netdev_get_station_cb (netdev.c:4801)
==17982==    by 0x47436E: process_unicast (genl.c:994)
==17982==    by 0x47436E: received_data (genl.c:1102)
==17982==    by 0x470FBB: io_callback (io.c:120)
==17982==    by 0x4701DC: l_main_iterate (main.c:478)
==17982==    by 0x4702AB: l_main_run (main.c:525)
==17982==    by 0x4702AB: l_main_run (main.c:507)
==17982==    by 0x4704BB: l_main_run_with_signal (main.c:647)
==17982==    by 0x403EDB: main (main.c:490)
==17982==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==17982==
Aborting (signal 11) [/home/denkenz/iwd/src/iwd]
++++++++ backtrace ++++++++
0  0x488a550 in /lib64/libc.so.6
1  0x483bc92 in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so
2  0x47de61 in _dbus1_builder_append_basic() at ell/dbus-util.c:983
3  0x41acb3 in dbus_append_dict_basic() at src/dbus.c:197
4  0x412051 in station_get_diagnostic_cb() at src/station.c:3618
5  0x405b1a in netdev_get_station_cb() at src/netdev.c:4801
This commit is contained in:
Denis Kenzior 2021-04-28 11:02:20 -05:00
parent 1c9a736ed5
commit 8cb61f9aae

View File

@ -116,6 +116,9 @@ bool diagnostic_info_to_dict(const struct diagnostic_station_info *info,
const char *diagnostic_akm_suite_to_security(enum ie_rsn_akm_suite akm, const char *diagnostic_akm_suite_to_security(enum ie_rsn_akm_suite akm,
bool wpa) bool wpa)
{ {
if (akm == 0)
return "Open";
switch (akm) { switch (akm) {
case IE_RSN_AKM_SUITE_8021X: case IE_RSN_AKM_SUITE_8021X:
case IE_RSN_AKM_SUITE_8021X_SHA256: case IE_RSN_AKM_SUITE_8021X_SHA256:
@ -147,6 +150,6 @@ const char *diagnostic_akm_suite_to_security(enum ie_rsn_akm_suite akm,
case IE_RSN_AKM_SUITE_OSEN: case IE_RSN_AKM_SUITE_OSEN:
return "OSEN"; return "OSEN";
default: default:
return NULL; return "Unknown";
} }
} }