Browse Source

Fix memory leak in P2P build without MLME

The ieee80211_sta_free_hw_features() function is now used outside
the MLME code, so better make sure it gets included in the build
to avoid leaking memory.
Jouni Malinen 14 years ago
parent
commit
2f9c6aa665

+ 0 - 17
wpa_supplicant/mlme.c

@@ -3030,23 +3030,6 @@ void ieee80211_sta_rx(struct wpa_supplicant *wpa_s, const u8 *buf, size_t len,
 }
 }
 
 
 
 
-void ieee80211_sta_free_hw_features(struct hostapd_hw_modes *hw_features,
-				    size_t num_hw_features)
-{
-	size_t i;
-
-	if (hw_features == NULL)
-		return;
-
-	for (i = 0; i < num_hw_features; i++) {
-		os_free(hw_features[i].channels);
-		os_free(hw_features[i].rates);
-	}
-
-	os_free(hw_features);
-}
-
-
 int ieee80211_sta_init(struct wpa_supplicant *wpa_s)
 int ieee80211_sta_init(struct wpa_supplicant *wpa_s)
 {
 {
 	u16 num_modes, flags;
 	u16 num_modes, flags;

+ 0 - 8
wpa_supplicant/mlme.h

@@ -37,8 +37,6 @@ int ieee80211_sta_associate(struct wpa_supplicant *wpa_s,
 			    struct wpa_driver_associate_params *params);
 			    struct wpa_driver_associate_params *params);
 int ieee80211_sta_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid,
 int ieee80211_sta_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid,
 			   size_t *len);
 			   size_t *len);
-void ieee80211_sta_free_hw_features(struct hostapd_hw_modes *hw_features,
-				    size_t num_hw_features);
 void ieee80211_sta_rx(struct wpa_supplicant *wpa_s, const u8 *buf, size_t len,
 void ieee80211_sta_rx(struct wpa_supplicant *wpa_s, const u8 *buf, size_t len,
 		      struct ieee80211_rx_status *rx_status);
 		      struct ieee80211_rx_status *rx_status);
 struct wpa_scan_results *
 struct wpa_scan_results *
@@ -91,12 +89,6 @@ static inline int ieee80211_sta_get_ssid(struct wpa_supplicant *wpa_s,
 	return -1;
 	return -1;
 }
 }
 
 
-static inline void
-ieee80211_sta_free_hw_features(struct hostapd_hw_modes *hw_features,
-			       size_t num_hw_features)
-{
-}
-
 static inline void
 static inline void
 ieee80211_sta_rx(struct wpa_supplicant *wpa_s, const u8 *buf, size_t len,
 ieee80211_sta_rx(struct wpa_supplicant *wpa_s, const u8 *buf, size_t len,
 		 struct ieee80211_rx_status *rx_status)
 		 struct ieee80211_rx_status *rx_status)

+ 17 - 0
wpa_supplicant/wpa_supplicant.c

@@ -2511,3 +2511,20 @@ void wpa_supplicant_update_config(struct wpa_supplicant *wpa_s)
 
 
 	wpa_s->conf->changed_parameters = 0;
 	wpa_s->conf->changed_parameters = 0;
 }
 }
+
+
+void ieee80211_sta_free_hw_features(struct hostapd_hw_modes *hw_features,
+				    size_t num_hw_features)
+{
+	size_t i;
+
+	if (hw_features == NULL)
+		return;
+
+	for (i = 0; i < num_hw_features; i++) {
+		os_free(hw_features[i].channels);
+		os_free(hw_features[i].rates);
+	}
+
+	os_free(hw_features);
+}

+ 2 - 0
wpa_supplicant/wpa_supplicant_i.h

@@ -597,6 +597,8 @@ enum wpa_key_mgmt key_mgmt2driver(int key_mgmt);
 enum wpa_cipher cipher_suite2driver(int cipher);
 enum wpa_cipher cipher_suite2driver(int cipher);
 void wpa_supplicant_update_config(struct wpa_supplicant *wpa_s);
 void wpa_supplicant_update_config(struct wpa_supplicant *wpa_s);
 void wpa_supplicant_clear_status(struct wpa_supplicant *wpa_s);
 void wpa_supplicant_clear_status(struct wpa_supplicant *wpa_s);
+void ieee80211_sta_free_hw_features(struct hostapd_hw_modes *hw_features,
+				    size_t num_hw_features);
 
 
 /* events.c */
 /* events.c */
 void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s);
 void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s);