Kaynağa Gözat

hostapd: fix memory leak in rrm ubus interface

Add missing wpabuf_free calls to the hostapd_rrm_nr_set and
hostapd_rrm_beacon_req functions.

Signed-off-by: Vladimir Palevich <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/22538
Signed-off-by: Nick Hainke <[email protected]>
Vladimir Palevich 3 hafta önce
ebeveyn
işleme
fde5d2e210

+ 6 - 3
package/network/services/hostapd/src/src/ap/ubus.c

@@ -1123,9 +1123,9 @@ hostapd_rrm_nr_set(struct ubus_context *ctx, struct ubus_object *obj,
 		if (strlen(s) == 0) {
 		if (strlen(s) == 0) {
 			/* Copy BSSID from neighbor report */
 			/* Copy BSSID from neighbor report */
 			if (hwaddr_compact_aton(nr_s, bssid))
 			if (hwaddr_compact_aton(nr_s, bssid))
-				goto invalid;
+				goto invalid_free;
 		} else if (hwaddr_aton(s, bssid)) {
 		} else if (hwaddr_aton(s, bssid)) {
-			goto invalid;
+			goto invalid_free;
 		}
 		}
 
 
 		/* SSID */
 		/* SSID */
@@ -1136,7 +1136,7 @@ hostapd_rrm_nr_set(struct ubus_context *ctx, struct ubus_object *obj,
 		} else {
 		} else {
 			ssid.ssid_len = strlen(s);
 			ssid.ssid_len = strlen(s);
 			if (ssid.ssid_len > sizeof(ssid.ssid))
 			if (ssid.ssid_len > sizeof(ssid.ssid))
-				goto invalid;
+				goto invalid_free;
 
 
 			memcpy(&ssid, s, ssid.ssid_len);
 			memcpy(&ssid, s, ssid.ssid_len);
 		}
 		}
@@ -1145,6 +1145,8 @@ hostapd_rrm_nr_set(struct ubus_context *ctx, struct ubus_object *obj,
 		wpabuf_free(data);
 		wpabuf_free(data);
 		continue;
 		continue;
 
 
+invalid_free:
+		wpabuf_free(data);
 invalid:
 invalid:
 		return UBUS_STATUS_INVALID_ARGUMENT;
 		return UBUS_STATUS_INVALID_ARGUMENT;
 	}
 	}
@@ -1252,6 +1254,7 @@ hostapd_rrm_beacon_req(struct ubus_context *ctx, struct ubus_object *obj,
 	}
 	}
 
 
 	ret = hostapd_send_beacon_req(hapd, addr, 0, req);
 	ret = hostapd_send_beacon_req(hapd, addr, 0, req);
+	wpabuf_free(req);
 	if (ret < 0)
 	if (ret < 0)
 		return -ret;
 		return -ret;