From: Yu Watanabe Date: Tue, 21 Sep 2021 17:30:03 +0000 (+0900) Subject: sd-netlink, wifi-util: fix attribute type of NL80211_ATTR_SSID X-Git-Tag: v250-rc1~599^2~8 X-Git-Url: http://git-history.diyao.me/?a=commitdiff_plain;h=f3e235ffb2d29c77cf710210d42eeb703cc5ace6;p=systemd%2F.git sd-netlink, wifi-util: fix attribute type of NL80211_ATTR_SSID --- diff --git a/src/basic/missing_network.h b/src/basic/missing_network.h index 24017df871..6e71b26afd 100644 --- a/src/basic/missing_network.h +++ b/src/basic/missing_network.h @@ -44,3 +44,8 @@ #ifndef BOND_MAX_ARP_TARGETS #define BOND_MAX_ARP_TARGETS 16 #endif + +/* Not exposed but defined in include/linux/ieee80211.h */ +#ifndef IEEE80211_MAX_SSID_LEN +#define IEEE80211_MAX_SSID_LEN 32 +#endif diff --git a/src/libsystemd/sd-netlink/netlink-types-genl.c b/src/libsystemd/sd-netlink/netlink-types-genl.c index b2f768181f..5df88c0518 100644 --- a/src/libsystemd/sd-netlink/netlink-types-genl.c +++ b/src/libsystemd/sd-netlink/netlink-types-genl.c @@ -11,6 +11,7 @@ #include #include +#include "missing_network.h" #include "netlink-genl.h" #include "netlink-types-internal.h" @@ -181,7 +182,7 @@ static const NLType genl_macsec_types[] = { static const NLType genl_nl80211_types[] = { [NL80211_ATTR_IFINDEX] = { .type = NETLINK_TYPE_U32 }, [NL80211_ATTR_MAC] = { .type = NETLINK_TYPE_ETHER_ADDR }, - [NL80211_ATTR_SSID] = { .type = NETLINK_TYPE_STRING }, + [NL80211_ATTR_SSID] = { .type = NETLINK_TYPE_BINARY, .size = IEEE80211_MAX_SSID_LEN }, [NL80211_ATTR_IFTYPE] = { .type = NETLINK_TYPE_U32 }, }; diff --git a/src/shared/wifi-util.c b/src/shared/wifi-util.c index f94f1744d3..8d6c184be1 100644 --- a/src/shared/wifi-util.c +++ b/src/shared/wifi-util.c @@ -9,6 +9,7 @@ int wifi_get_interface(sd_netlink *genl, int ifindex, enum nl80211_iftype *ret_i _cleanup_free_ char *ssid = NULL; const char *family; uint32_t iftype; + size_t len; int r; assert(genl); @@ -53,9 +54,18 @@ int wifi_get_interface(sd_netlink *genl, int ifindex, enum nl80211_iftype *ret_i if (r < 0) return log_debug_errno(r, "Failed to get NL80211_ATTR_IFTYPE attribute: %m"); - r = sd_netlink_message_read_string_strdup(reply, NL80211_ATTR_SSID, &ssid); + r = sd_netlink_message_read_data_suffix0(reply, NL80211_ATTR_SSID, &len, (void**) &ssid); if (r < 0 && r != -ENODATA) return log_debug_errno(r, "Failed to get NL80211_ATTR_SSID attribute: %m"); + if (r >= 0) { + if (len == 0) { + log_debug("SSID has zero length, ignoring the received SSID."); + ssid = mfree(ssid); + } else if (strlen_ptr(ssid) != len) { + log_debug("SSID contains NUL character(s), ignoring the received SSID."); + ssid = mfree(ssid); + } + } if (ret_iftype) *ret_iftype = iftype;