From e565b7503282676350aef03d546cddf1556996cb Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Thu, 1 Aug 2024 12:44:08 -0500 Subject: [PATCH] defs: Add defs.h to hold certain global definitions This will help to get rid of magic number use throughout the project. The definitions should be limited to global magic numbers that are used throughout the project, for example SSID length, MAC address length, etc. --- Makefile.am | 3 ++- src/ap.c | 8 ++++---- src/crypto.c | 3 ++- src/defs.h | 13 +++++++++++++ src/dpp-util.h | 5 ++++- src/eap-wsc.c | 4 ++-- src/handshake.h | 2 +- src/ie.c | 2 +- src/ie.h | 3 ++- src/knownnetworks.h | 4 +++- src/network.c | 2 +- src/p2putil.h | 3 ++- src/rrm.c | 4 ++-- src/scan.c | 2 +- src/scan.h | 4 +++- src/station.c | 4 ++-- src/storage.c | 3 ++- src/util.c | 5 +++-- src/wsc.h | 2 +- src/wscutil.c | 2 +- src/wscutil.h | 4 +++- unit/test-util.c | 3 ++- 22 files changed, 57 insertions(+), 28 deletions(-) create mode 100644 src/defs.h diff --git a/Makefile.am b/Makefile.am index d438a5ba..61d46d7d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -214,7 +214,8 @@ eap_sources = src/eap.c src/eap.h src/eap-private.h \ if DAEMON libexec_PROGRAMS += src/iwd -src_iwd_SOURCES = src/main.c linux/nl80211.h src/iwd.h src/missing.h \ +src_iwd_SOURCES = src/main.c linux/nl80211.h src/iwd.h \ + src/missing.h src/defs.h \ src/netdev.h src/netdev.c \ src/wiphy.h src/wiphy.c \ src/device.c \ diff --git a/src/ap.c b/src/ap.c index b4e7593e..6650f0af 100644 --- a/src/ap.c +++ b/src/ap.c @@ -67,7 +67,7 @@ struct ap_state { ap_stopped_func_t stopped_func; void *user_data; - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; char passphrase[64]; uint8_t psk[32]; enum band_freq band; @@ -153,7 +153,7 @@ struct ap_wsc_pbc_probe_record { }; struct ap_network { - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; int16_t signal; enum security security; }; @@ -181,7 +181,7 @@ static int network_signal_compare(const void *a, const void *b, void *user) static struct ap_network *ap_network_find(struct ap_state *ap, struct scan_bss *bss) { - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; memcpy(ssid, bss->ssid, bss->ssid_len); ssid[bss->ssid_len] = '\0'; @@ -3629,7 +3629,7 @@ static int ap_load_config(struct ap_state *ap, const struct l_settings *config, return -ENOMSG; len = strlen(strval); - if (len < 1 || len > 32) { + if (len < 1 || len > SSID_MAX_SIZE) { l_error("AP SSID length outside the [1, 32] range"); return -EINVAL; } diff --git a/src/crypto.c b/src/crypto.c index 15a7cde7..35941a2e 100644 --- a/src/crypto.c +++ b/src/crypto.c @@ -35,6 +35,7 @@ #include "ell/useful.h" #include "src/missing.h" +#include "src/defs.h" #include "src/crypto.h" #define ARC4_MIN_KEY_SIZE 1 @@ -567,7 +568,7 @@ int crypto_psk_from_passphrase(const char *passphrase, if (!crypto_passphrase_is_valid(passphrase)) return -ERANGE; - if (ssid_len == 0 || ssid_len > 32) + if (ssid_len == 0 || ssid_len > SSID_MAX_SIZE) return -ERANGE; result = l_cert_pkcs5_pbkdf2(L_CHECKSUM_SHA1, passphrase, diff --git a/src/defs.h b/src/defs.h new file mode 100644 index 00000000..b83763b8 --- /dev/null +++ b/src/defs.h @@ -0,0 +1,13 @@ +/* + * Wireless daemon for Linux + * Copyright (C) 2024 Cruise, LLC + * + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#ifndef __DEFS_H__ +#define __DEFS_H__ + +#define SSID_MAX_SIZE 32 + +#endif diff --git a/src/dpp-util.h b/src/dpp-util.h index dc8a894b..86ef36f9 100644 --- a/src/dpp-util.h +++ b/src/dpp-util.h @@ -19,6 +19,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ + +#include "src/defs.h" + struct l_ecc_point; struct l_ecc_scalar; enum ie_rsn_akm_suite; @@ -112,7 +115,7 @@ enum dpp_attribute_type { }; struct dpp_configuration { - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; size_t ssid_len; uint32_t akm_suites; char *passphrase; diff --git a/src/eap-wsc.c b/src/eap-wsc.c index 789a20f0..4e940bf8 100644 --- a/src/eap-wsc.c +++ b/src/eap-wsc.c @@ -2067,7 +2067,7 @@ static bool eap_wsc_r_load_settings(struct eap_state *eap, str = l_settings_get_string(settings, "WSC", "WPA2-SSID"); if (str) { - if (strlen(str) > 32) + if (strlen(str) > SSID_MAX_SIZE) goto bad_string; wsc->m2->auth_type_flags |= @@ -2113,7 +2113,7 @@ static bool eap_wsc_r_load_settings(struct eap_state *eap, str = l_settings_get_string(settings, "WSC", "Open-SSID"); if (str) { - if (strlen(str) > 32) + if (strlen(str) > SSID_MAX_SIZE) goto bad_string; wsc->m2->auth_type_flags |= WSC_AUTHENTICATION_TYPE_OPEN; diff --git a/src/handshake.h b/src/handshake.h index 8a356e6b..d1116472 100644 --- a/src/handshake.h +++ b/src/handshake.h @@ -141,7 +141,7 @@ struct handshake_state { bool supplicant_ocvc : 1; bool ext_key_id_capable : 1; bool force_default_ecc_group : 1; - uint8_t ssid[32]; + uint8_t ssid[SSID_MAX_SIZE]; size_t ssid_len; char *passphrase; char *password_identifier; diff --git a/src/ie.c b/src/ie.c index b180291a..c8bb70b9 100644 --- a/src/ie.c +++ b/src/ie.c @@ -2642,7 +2642,7 @@ int ie_parse_owe_transition(const void *data, size_t len, return -ENOMSG; slen = l_get_u8(ie + 12); - if (slen > 32) + if (slen > SSID_MAX_SIZE) return -ENOMSG; /* diff --git a/src/ie.h b/src/ie.h index 82945de6..4498785a 100644 --- a/src/ie.h +++ b/src/ie.h @@ -23,6 +23,7 @@ #include #include #include +#include "src/defs.h" /* * Information elements, IEEE Std 802.11-2012 ch. 8.4.2 and @@ -565,7 +566,7 @@ struct ie_fils_ip_addr_response_info { struct ie_owe_transition_info { uint8_t bssid[6]; - uint8_t ssid[32]; + uint8_t ssid[SSID_MAX_SIZE]; size_t ssid_len; uint8_t oper_class; uint8_t channel; diff --git a/src/knownnetworks.h b/src/knownnetworks.h index c81bd9aa..a117ded5 100644 --- a/src/knownnetworks.h +++ b/src/knownnetworks.h @@ -20,6 +20,8 @@ * */ +#include "src/defs.h" + #define SETTINGS "Settings" #define NET_HIDDEN SETTINGS, "Hidden" #define NET_AUTOCONNECT SETTINGS, "AutoConnect" @@ -84,7 +86,7 @@ struct network_config { struct network_info { const struct network_info_ops *ops; - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; enum security type; struct l_queue *known_frequencies; int seen_count; /* Ref count for network.info */ diff --git a/src/network.c b/src/network.c index 300e8090..20d9a3dd 100644 --- a/src/network.c +++ b/src/network.c @@ -63,7 +63,7 @@ static uint32_t known_networks_watch; static uint32_t event_watch; struct network { - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; enum security security; char *object_path; struct station *station; diff --git a/src/p2putil.h b/src/p2putil.h index 3a76414b..7ca9fb2e 100644 --- a/src/p2putil.h +++ b/src/p2putil.h @@ -22,6 +22,7 @@ #include +#include "src/defs.h" #include "src/wscutil.h" struct l_queue; @@ -285,7 +286,7 @@ struct p2p_client_info_descriptor { struct p2p_group_id_attr { uint8_t device_addr[6]; - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; }; struct p2p_interface_attr { diff --git a/src/rrm.c b/src/rrm.c index 7054db36..a11a6532 100644 --- a/src/rrm.c +++ b/src/rrm.c @@ -108,8 +108,8 @@ struct rrm_beacon_req_info { uint8_t oper_class; uint8_t channel; /* The single channel provided in request */ uint16_t duration; - uint8_t bssid[6]; /* Request filtered by BSSID */ - char ssid[33]; /* Request filtered by SSID */ + uint8_t bssid[6]; /* Request filtered by BSSID */ + char ssid[SSID_MAX_SIZE + 1]; /* Request filtered by SSID */ bool has_ssid; uint32_t scan_id; uint64_t scan_start_time; diff --git a/src/scan.c b/src/scan.c index c46ef8a0..9de235a8 100644 --- a/src/scan.c +++ b/src/scan.c @@ -1325,7 +1325,7 @@ static bool scan_parse_bss_information_elements(struct scan_bss *bss, switch (tag) { case IE_TYPE_SSID: - if (iter.len > 32) + if (iter.len > SSID_MAX_SIZE) return false; memcpy(bss->ssid, iter.data, iter.len); diff --git a/src/scan.h b/src/scan.h index 06753b82..50adca7c 100644 --- a/src/scan.h +++ b/src/scan.h @@ -20,6 +20,8 @@ * */ +#include "src/defs.h" + struct scan_freq_set; struct ie_rsn_info; struct ie_owe_transition_info; @@ -62,7 +64,7 @@ struct scan_bss { }; struct ie_owe_transition_info *owe_trans; uint8_t mde[3]; - uint8_t ssid[32]; + uint8_t ssid[SSID_MAX_SIZE]; uint8_t ssid_len; uint8_t utilization; uint8_t cc[3]; diff --git a/src/station.c b/src/station.c index 333b0fa1..30a1232a 100644 --- a/src/station.c +++ b/src/station.c @@ -498,7 +498,7 @@ static struct network *station_add_seen_bss(struct station *station, struct network *network; enum security security; const char *path; - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; station_print_scan_bss(bss); @@ -3916,7 +3916,7 @@ static struct l_dbus_message *station_dbus_connect_hidden_network( if (!l_dbus_message_get_arguments(message, "s", &ssid)) return dbus_error_invalid_args(message); - if (strlen(ssid) > 32) + if (strlen(ssid) > SSID_MAX_SIZE) return dbus_error_invalid_args(message); if (known_networks_find(ssid, SECURITY_PSK) || diff --git a/src/storage.c b/src/storage.c index 4200030c..b756b172 100644 --- a/src/storage.c +++ b/src/storage.c @@ -45,6 +45,7 @@ #include "ell/useful.h" #include "src/missing.h" +#include "src/defs.h" #include "src/common.h" #include "src/storage.h" #include "src/crypto.h" @@ -315,7 +316,7 @@ const char *storage_network_ssid_from_path(const char *path, return NULL; if (filename[0] != '=') { - if (end == filename || end - filename > 32) + if (end == filename || end - filename > SSID_MAX_SIZE) return NULL; for (c = filename; c < end; c++) diff --git a/src/util.c b/src/util.c index 69019dc8..5ce764ae 100644 --- a/src/util.c +++ b/src/util.c @@ -34,6 +34,7 @@ #include #include "ell/useful.h" +#include "src/defs.h" #include "src/util.h" #include "src/band.h" @@ -45,7 +46,7 @@ const char *util_ssid_to_utf8(size_t len, const uint8_t *ssid) memset(buf, 0, sizeof(buf)); - if (len > 32) + if (len > SSID_MAX_SIZE) goto no_ssid; while (i < len && !ssid[i]) @@ -84,7 +85,7 @@ no_ssid: bool util_ssid_is_utf8(size_t len, const uint8_t *ssid) { - if (len > 32) + if (len > SSID_MAX_SIZE) return false; return l_utf8_validate((const char *)ssid, len, NULL); diff --git a/src/wsc.h b/src/wsc.h index 35ce9199..bb6ff648 100644 --- a/src/wsc.h +++ b/src/wsc.h @@ -21,7 +21,7 @@ */ struct wsc_credentials_info { - char ssid[33]; + char ssid[SSID_MAX_SIZE + 1]; enum security security; union { uint8_t psk[32]; diff --git a/src/wscutil.c b/src/wscutil.c index 12e2125a..934deeda 100644 --- a/src/wscutil.c +++ b/src/wscutil.c @@ -500,7 +500,7 @@ static bool extract_ssid(struct wsc_attr_iter *iter, void *data) unsigned int len; len = wsc_attr_iter_get_length(iter); - if (len > 32) + if (len > SSID_MAX_SIZE) return false; ssid->iov_len = len; diff --git a/src/wscutil.h b/src/wscutil.h index 1d603d8f..91e74a5a 100644 --- a/src/wscutil.h +++ b/src/wscutil.h @@ -20,6 +20,8 @@ * */ +#include "src/defs.h" + struct iovec; /* Wi-Fi Simple Configuration Technical Specification v2.0.5, Section 12 */ @@ -330,7 +332,7 @@ static inline unsigned int wsc_attr_iter_get_pos(struct wsc_attr_iter *iter) } struct wsc_credential { - uint8_t ssid[32]; + uint8_t ssid[SSID_MAX_SIZE]; uint8_t ssid_len; uint16_t auth_type; uint16_t encryption_type; diff --git a/unit/test-util.c b/unit/test-util.c index 3c143cd7..0bfd1587 100644 --- a/unit/test-util.c +++ b/unit/test-util.c @@ -31,11 +31,12 @@ #include #include +#include "src/defs.h" #include "src/util.h" struct ssid_test_data { size_t len; - uint8_t ssid[32]; + uint8_t ssid[SSID_MAX_SIZE]; const char *string; bool result; };