summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2021-12-13 21:42:38 -0800
committerXin Li <delphij@google.com>2021-12-14 08:39:08 -0800
commit0c20f012d8dc3133ac32cba5db19e448f02e5774 (patch)
tree126b09a93cf6a0d13c7faefcd77792d46a65ec89
parent6daa5bce6fdcf9f2a973ef86ee49a798f71e26ce (diff)
parenta81d4a87d01d6b73a8adb2660df69f0e42f1f3ea (diff)
downloadwlan-0c20f012d8dc3133ac32cba5db19e448f02e5774.tar.gz
Merge Android 12 QPR1
Bug: 210511427 Merged-In: I5fe51e116f4a99c3cdf0aadbeae4f8706499a1b1 Change-Id: I7b3a2852d6ddaa529db2286e809a5fe8d2b7a56c
-rwxr-xr-xbcmdhd/wifi_hal/wifi_hal.cpp5
-rwxr-xr-xbcmdhd/wifi_hal/wifi_logger.cpp27
2 files changed, 25 insertions, 7 deletions
diff --git a/bcmdhd/wifi_hal/wifi_hal.cpp b/bcmdhd/wifi_hal/wifi_hal.cpp
index 0ba633b..d3ffe57 100755
--- a/bcmdhd/wifi_hal/wifi_hal.cpp
+++ b/bcmdhd/wifi_hal/wifi_hal.cpp
@@ -66,6 +66,7 @@
#define WIFI_HAL_CMD_SOCK_PORT 644
#define WIFI_HAL_EVENT_SOCK_PORT 645
#define MAX_VIRTUAL_IFACES 5
+#define WIFI_HAL_EVENT_BUFFER_NOT_AVAILABLE 105
/*
* Defines for wifi_wait_for_driver_ready()
@@ -747,6 +748,10 @@ void wifi_event_loop(wifi_handle handle)
ssize_t result2 = TEMP_FAILURE_RETRY(read(pfd[0].fd, buf, sizeof(buf)));
ALOGE("Read after POLL returned %zd, error no = %d (%s)", result2,
errno, strerror(errno));
+ if (errno == WIFI_HAL_EVENT_BUFFER_NOT_AVAILABLE) {
+ ALOGE("Exit, No buffer space");
+ break;
+ }
} else if (pfd[0].revents & POLLHUP) {
ALOGE("Remote side hung up");
break;
diff --git a/bcmdhd/wifi_hal/wifi_logger.cpp b/bcmdhd/wifi_hal/wifi_logger.cpp
index a9f9506..440d9ba 100755
--- a/bcmdhd/wifi_hal/wifi_logger.cpp
+++ b/bcmdhd/wifi_hal/wifi_logger.cpp
@@ -419,7 +419,7 @@ public:
}
int start() {
- // ALOGD("Start debug command");
+ ALOGD("Start debug command");
WifiRequest request(familyId(), ifaceId());
int result = createRequest(request);
if (result != WIFI_SUCCESS) {
@@ -435,7 +435,7 @@ public:
}
virtual int handleResponse(WifiEvent& reply) {
- ALOGD("In DebugCommand::handleResponse");
+ ALOGD("In DebugCommand::handleResponse, mType:%d\n", mType);
if (reply.get_cmd() != NL80211_CMD_VENDOR) {
ALOGD("Ignoring reply with cmd = %d", reply.get_cmd());
@@ -490,9 +490,15 @@ public:
it.next();
for (unsigned int i = 0; it.has_next() && i < *mNumRings; it.next()) {
if (it.get_type() == LOGGER_ATTRIBUTE_RING_STATUS) {
- memcpy(status, it.get_data(), sizeof(wifi_ring_buffer_status));
- i++;
- status++;
+ if (it.get_len() > sizeof(wifi_ring_buffer_status)) {
+ ALOGE("ring status unexpected len = %d, dest len = %lu",
+ it.get_len(), sizeof(wifi_ring_buffer_status));
+ return NL_SKIP;
+ } else {
+ memcpy(status, it.get_data(), sizeof(wifi_ring_buffer_status));
+ i++;
+ status++;
+ }
} else {
ALOGW("Ignoring invalid attribute type = %d, size = %d",
it.get_type(), it.get_len());
@@ -699,16 +705,23 @@ public:
return NL_SKIP;
}
- if(event_id == GOOGLE_DEBUG_RING_EVENT) {
+ if (event_id == GOOGLE_DEBUG_RING_EVENT) {
wifi_ring_buffer_status status;
memset(&status, 0, sizeof(status));
for (nl_iterator it(vendor_data); it.has_next(); it.next()) {
if (it.get_type() == LOGGER_ATTRIBUTE_RING_STATUS) {
- memcpy(&status, it.get_data(), sizeof(status));
+ if (it.get_len() > sizeof(wifi_ring_buffer_status)) {
+ ALOGE("SetLogHandler: ring status unexpected len = %d, dest len = %lu",
+ it.get_len(), sizeof(wifi_ring_buffer_status));
+ return NL_SKIP;
+ } else {
+ memcpy(&status, it.get_data(), sizeof(wifi_ring_buffer_status));
+ }
} else if (it.get_type() == LOGGER_ATTRIBUTE_RING_DATA) {
buffer_size = it.get_len();
buffer = (char *)it.get_data();
+ ALOGV("SetLogHandler: ring data size = %d", buffer_size);
} else {
ALOGW("Ignoring invalid attribute type = %d, size = %d",
it.get_type(), it.get_len());