[automerger skipped] Merge "DO NOT MERGE - Merge RQ3A.210605.005" am: d83838d918 -s ours am: badb90b5e1 -s ours
am skip reason: Merged-In I329e495f244ca88a6614fab3556eb1267720d35f with SHA-1 65199c0c88 is already in history
Original change: https://android-review.googlesource.com/c/platform/hardware/qcom/wlan/+/1741198
Change-Id: I1ed6a70ff6b03fcbe174d5bc53aad63803835ea5
diff --git a/OWNERS b/OWNERS
index 36eb7f9..351212a 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,3 +1,2 @@
etancohen@google.com
-kumaranand@google.com
-rpius@google.com
+arabawy@google.com
diff --git a/qcwcn/wifi_hal/llstats.cpp b/qcwcn/wifi_hal/llstats.cpp
index 407a6c3..50b8149 100644
--- a/qcwcn/wifi_hal/llstats.cpp
+++ b/qcwcn/wifi_hal/llstats.cpp
@@ -1151,10 +1151,19 @@
memset(pIfaceStat, 0, resultsBufSize);
if(mResultsParams.iface_stat) {
- memcpy ( pIfaceStat, mResultsParams.iface_stat,
- sizeof(wifi_iface_stat));
- free (mResultsParams.iface_stat);
- mResultsParams.iface_stat = pIfaceStat;
+ if(resultsBufSize >= sizeof(wifi_iface_stat)) {
+ memcpy ( pIfaceStat, mResultsParams.iface_stat,
+ sizeof(wifi_iface_stat));
+ free (mResultsParams.iface_stat);
+ mResultsParams.iface_stat = pIfaceStat;
+ } else {
+ ALOGE("%s: numPeers = %u, num_rates= %u, "
+ "either numPeers or num_rates is invalid",
+ __FUNCTION__,numPeers,num_rates);
+ status = WIFI_ERROR_UNKNOWN;
+ free(pIfaceStat);
+ goto cleanup;
+ }
}
wifi_peer_info *pPeerStats;
pIfaceStat->num_peers = numPeers;
diff --git a/qcwcn/wifi_hal/nan_ind.cpp b/qcwcn/wifi_hal/nan_ind.cpp
index f661ed3..1fe651d 100644
--- a/qcwcn/wifi_hal/nan_ind.cpp
+++ b/qcwcn/wifi_hal/nan_ind.cpp
@@ -346,6 +346,11 @@
/* Populate receive discovery attribute from
received TLV */
idx = event->num_rx_discovery_attr;
+ if (idx < 0 || idx >= NAN_MAX_POSTDISCOVERY_LEN) {
+ ALOGE("NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_RECEIVE"
+ " Incorrect index:%d >= %d", idx, NAN_MAX_POSTDISCOVERY_LEN);
+ break;
+ }
ret = getNanReceivePostDiscoveryVal(outputTlv.value,
outputTlv.length,
&event->discovery_attr[idx]);
diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp
index d64e3b8..f071dfc 100644
--- a/qcwcn/wifi_hal/wifi_hal.cpp
+++ b/qcwcn/wifi_hal/wifi_hal.cpp
@@ -1879,6 +1879,24 @@
{
hal_info *info = (hal_info *)handle;
+ /* In case of dynamic interface add/remove, interface handles need to be
+ * updated so that, interface specific APIs could be instantiated.
+ * Reload here to get interfaces which are dynamically added. */
+
+ if (info->num_interfaces > 0) {
+ for (int i = 0; i < info->num_interfaces; i++)
+ free(info->interfaces[i]);
+ free(info->interfaces);
+ info->interfaces = NULL;
+ info->num_interfaces = 0;
+ }
+
+ wifi_error ret = wifi_init_interfaces(handle);
+ if (ret != WIFI_SUCCESS) {
+ ALOGE("Failed to init interfaces while wifi_get_ifaces");
+ return ret;
+ }
+
*interfaces = (wifi_interface_handle *)info->interfaces;
*num = info->num_interfaces;
diff --git a/qcwcn/wifi_hal/wificonfig.cpp b/qcwcn/wifi_hal/wificonfig.cpp
index 8ab296a..c6ceb9d 100644
--- a/qcwcn/wifi_hal/wificonfig.cpp
+++ b/qcwcn/wifi_hal/wificonfig.cpp
@@ -360,12 +360,14 @@
switch (scenario) {
case WIFI_POWER_SCENARIO_VOICE_CALL:
- case WIFI_POWER_SCENARIO_ON_HEAD_CELL_OFF:
case WIFI_POWER_SCENARIO_ON_BODY_BT:
bdf_file = QCA_WLAN_VENDOR_ATTR_SAR_LIMITS_SELECT_BDF0;
break;
+ case WIFI_POWER_SCENARIO_ON_HEAD_CELL_OFF:
case WIFI_POWER_SCENARIO_ON_HEAD_CELL_ON:
+ case WIFI_POWER_SCENARIO_ON_HEAD_HOTSPOT:
+ case WIFI_POWER_SCENARIO_ON_HEAD_HOTSPOT_MMW:
bdf_file = QCA_WLAN_VENDOR_ATTR_SAR_LIMITS_SELECT_BDF1;
break;
@@ -374,6 +376,11 @@
break;
case WIFI_POWER_SCENARIO_ON_BODY_CELL_ON:
+ case WIFI_POWER_SCENARIO_ON_BODY_CELL_ON_BT:
+ case WIFI_POWER_SCENARIO_ON_BODY_HOTSPOT:
+ case WIFI_POWER_SCENARIO_ON_BODY_HOTSPOT_BT:
+ case WIFI_POWER_SCENARIO_ON_BODY_HOTSPOT_MMW:
+ case WIFI_POWER_SCENARIO_ON_BODY_HOTSPOT_BT_MMW:
bdf_file = QCA_WLAN_VENDOR_ATTR_SAR_LIMITS_SELECT_BDF3;
break;