summaryrefslogtreecommitdiff
path: root/qcwcn/wifi_hal/wifi_hal.cpp
diff options
context:
space:
mode:
authorSubhani Shaik <subhanis@codeaurora.org>2016-03-14 12:15:32 -0700
committerMukesh Agrawal <quiche@google.com>2016-03-16 17:51:59 +0000
commitc193fd5cb051a566bd1a0e9fd565504cab46ff23 (patch)
treebb1b0fea300ac427d41d76005194df206f69a600 /qcwcn/wifi_hal/wifi_hal.cpp
parent76bf03b613d7c1aa14ba63b1670f0c9d11c367fc (diff)
downloadwlan-c193fd5cb051a566bd1a0e9fd565504cab46ff23.tar.gz
WifiHal: Address Debug framework bugs and misc issues
Fix multiple issues 1) Extract wmsg length from nlmsg_hdr with ntohs() 2) Do not free local frame_content in get() 3) Avoid illegal memory access in wifi_set_packet_filter fn 4) Updating new enums related to WIFI Configuration BUG: 27502434 BUG: 27595799 Change-Id: I369a6b278f3e587f07d3a57be97b61eda658104d
Diffstat (limited to 'qcwcn/wifi_hal/wifi_hal.cpp')
-rw-r--r--qcwcn/wifi_hal/wifi_hal.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp
index a407741..3727e0b 100644
--- a/qcwcn/wifi_hal/wifi_hal.cpp
+++ b/qcwcn/wifi_hal/wifi_hal.cpp
@@ -1269,15 +1269,15 @@ static wifi_error wifi_set_packet_filter(wifi_interface_handle iface,
return WIFI_ERROR_INVALID_ARGS;
}
- ret = initialize_vendor_cmd(iface, get_requestid(),
- QCA_NL80211_VENDOR_SUBCMD_PACKET_FILTER,
- &vCommand);
- if (ret != WIFI_SUCCESS) {
- ALOGE("%s: Initialization failed", __FUNCTION__);
- return (wifi_error)ret;
- }
-
do {
+ ret = initialize_vendor_cmd(iface, get_requestid(),
+ QCA_NL80211_VENDOR_SUBCMD_PACKET_FILTER,
+ &vCommand);
+ if (ret != WIFI_SUCCESS) {
+ ALOGE("%s: Initialization failed", __FUNCTION__);
+ return (wifi_error)ret;
+ }
+
/* Add the vendor specific attributes for the NL command. */
nlData = vCommand->attr_start(NL80211_ATTR_VENDOR_DATA);
if (!nlData)
@@ -1317,11 +1317,16 @@ static wifi_error wifi_set_packet_filter(wifi_interface_handle iface,
goto cleanup;
}
+ /* destroy the object after sending each fragment to driver */
+ delete vCommand;
+ vCommand = NULL;
+
current_offset += min(info->firmware_bus_max_size, len);
} while (current_offset < len);
cleanup:
- delete vCommand;
+ if (vCommand)
+ delete vCommand;
return (wifi_error)ret;
}