diff --git a/ftm/dispatcher/src/wlan_ftm_ucfg_api.c b/ftm/dispatcher/src/wlan_ftm_ucfg_api.c index 37cc6dccf2e1..10449058558d 100644 --- a/ftm/dispatcher/src/wlan_ftm_ucfg_api.c +++ b/ftm/dispatcher/src/wlan_ftm_ucfg_api.c @@ -51,7 +51,7 @@ wlan_ftm_process_utf_event(struct wlan_objmgr_pdev *pdev, uint8_t *event_buf, uint32_t len) { struct wifi_ftm_pdev_priv_obj *ftm_pdev_obj; - u_int16_t utf_datalen; + uint32_t utf_datalen; uint8_t *utf_data; struct ftm_seg_hdr_info seghdr_info; u_int8_t total_segments, current_seq; @@ -82,6 +82,11 @@ wlan_ftm_process_utf_event(struct wlan_objmgr_pdev *pdev, } } + if ((len > FTM_CMD_MAX_BUF_LENGTH) || + (ftm_pdev_obj->offset > (FTM_CMD_MAX_BUF_LENGTH - utf_datalen))) { + ftm_err("Invalid utf data len :%d", len); + return QDF_STATUS_E_FAILURE; + } qdf_mem_copy(&ftm_pdev_obj->data[ftm_pdev_obj->offset], &utf_data[sizeof(seghdr_info)], utf_datalen);