qcacmn: Don't consider WMI_MIN_HEAD_ROOM in WMI msg length
Currently, Host driver assumes WMI_MIN_HEAD_ROOM is part of WMI messages and Validations are done accordingly. But this WMI_MIN_HEAD_ROOM is not considered in the firmware. Because of this host may drop valid events. To avoid this, Don't consider WMI_MIN_HEAD_ROOM while validating WMI msg length. Change-Id: I5f1fe12cfae570e636defb8a4a46ec154f988195 CRs-Fixed: 2844982
This commit is contained in:
@@ -1646,7 +1646,7 @@ wmi_buf_alloc_debug(wmi_unified_t wmi_handle, uint32_t len,
|
|||||||
{
|
{
|
||||||
wmi_buf_t wmi_buf;
|
wmi_buf_t wmi_buf;
|
||||||
|
|
||||||
if (roundup(len + WMI_MIN_HEAD_ROOM, 4) > wmi_handle->max_msg_len) {
|
if (roundup(len + sizeof(WMI_CMD_HDR), 4) > wmi_handle->max_msg_len) {
|
||||||
QDF_ASSERT(0);
|
QDF_ASSERT(0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -1687,7 +1687,7 @@ wmi_buf_t wmi_buf_alloc_fl(wmi_unified_t wmi_handle, uint32_t len,
|
|||||||
{
|
{
|
||||||
wmi_buf_t wmi_buf;
|
wmi_buf_t wmi_buf;
|
||||||
|
|
||||||
if (roundup(len + WMI_MIN_HEAD_ROOM, 4) > wmi_handle->max_msg_len) {
|
if (roundup(len + sizeof(WMI_CMD_HDR), 4) > wmi_handle->max_msg_len) {
|
||||||
QDF_DEBUG_PANIC("Invalid length %u (via %s:%u)",
|
QDF_DEBUG_PANIC("Invalid length %u (via %s:%u)",
|
||||||
len, func, line);
|
len, func, line);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -2578,18 +2578,11 @@ static int __wmi_process_qmi_fw_event(void *wmi_cb_ctx, void *buf, int len)
|
|||||||
struct wmi_unified *wmi_handle = wmi_cb_ctx;
|
struct wmi_unified *wmi_handle = wmi_cb_ctx;
|
||||||
wmi_buf_t evt_buf;
|
wmi_buf_t evt_buf;
|
||||||
uint32_t evt_id;
|
uint32_t evt_id;
|
||||||
int wmi_msg_len;
|
|
||||||
|
|
||||||
if (!wmi_handle || !buf || (len < WMI_MIN_HEAD_ROOM))
|
if (!wmi_handle || !buf)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/**
|
evt_buf = wmi_buf_alloc(wmi_handle, len);
|
||||||
* Subtract WMI_MIN_HEAD_ROOM from received QMI event length to get
|
|
||||||
* wmi message length
|
|
||||||
*/
|
|
||||||
wmi_msg_len = len - WMI_MIN_HEAD_ROOM;
|
|
||||||
|
|
||||||
evt_buf = wmi_buf_alloc(wmi_handle, wmi_msg_len);
|
|
||||||
if (!evt_buf)
|
if (!evt_buf)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user