diff options
| author | Deepak Dhamdhere <ddhamdhe@qca.qualcomm.com> | 2016-05-06 00:41:51 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-05-10 03:49:45 -0700 |
| commit | 400f8fc5b51fb35e0719c1d956fbef8a12cf835f (patch) | |
| tree | 2d2f9af3d986065b4b8ba24743e9ea1562a94fc9 | |
| parent | 099dcf363c629d99c00fdfef4ce8d7fd655d8480 (diff) | |
qcacld-2.0: Fix NAN data path vendor event length calculation
Fix the length calculation of cfg80211_vendor_event_alloc buffer
used for sending some NAN data path vendor events to upper layer.
CRs-Fixed: 962367
Change-Id: I5553deee159dfa3e99a1bbe7db1c336c978e02ff
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_nan_datapath.c | 64 |
1 files changed, 50 insertions, 14 deletions
diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.c b/CORE/HDD/src/wlan_hdd_nan_datapath.c index b4b36834167e..449ad944f750 100644 --- a/CORE/HDD/src/wlan_hdd_nan_datapath.c +++ b/CORE/HDD/src/wlan_hdd_nan_datapath.c @@ -58,6 +58,8 @@ qca_wlan_vendor_ndp_policy[QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX + 1] = { .len = VOS_MAC_ADDR_SIZE }, [QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY] = { .type = NLA_BINARY, .len = NDP_NUM_INSTANCE_ID }, + [QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE] = { .type = NLA_U32 }, + [QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE] = { .type = NLA_U32 }, }; /** @@ -738,6 +740,13 @@ static int hdd_ndp_end_req_handler(hdd_context_t *hdd_ctx, struct nlattr **tb) * The function is expected to send a response back to the user space * even if the creation of BSS has failed * + * Following vendor event is sent to cfg80211: + * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = + * QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE (4 bytes) + * * Return: none */ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter, @@ -746,8 +755,8 @@ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter, struct sk_buff *vendor_event; hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct ndi_create_rsp *ndi_rsp = (struct ndi_create_rsp *)rsp_params; - uint32_t data_len = (2 * sizeof(uint32_t)) + sizeof(uint16_t) + - NLMSG_HDRLEN + (3 * NLA_HDRLEN); + uint32_t data_len = (3 * sizeof(uint32_t)) + sizeof(uint16_t) + + NLMSG_HDRLEN + (4 * NLA_HDRLEN); struct nan_datapath_ctx *ndp_ctx = WLAN_HDD_GET_NDP_CTX_PTR(adapter); bool create_fail = false; uint8_t create_transaction_id = 0; @@ -900,6 +909,13 @@ static void hdd_ndp_iface_delete_rsp_handler(hdd_adapter_t *adapter, * hdd_ndp_session_end_handler() - NDI session termination handler * @adapter: pointer to adapter context * + * Following vendor event is sent to cfg80211: + * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = + * QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE (4 bytes) + * * Return: none */ void hdd_ndp_session_end_handler(hdd_adapter_t *adapter) @@ -907,8 +923,8 @@ void hdd_ndp_session_end_handler(hdd_adapter_t *adapter) hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct sk_buff *vendor_event; struct nan_datapath_ctx *ndp_ctx; - uint32_t data_len = sizeof(uint32_t) * 2 + sizeof(uint16_t) + - NLA_HDRLEN * 3 + NLMSG_HDRLEN; + uint32_t data_len = sizeof(uint32_t) * 3 + sizeof(uint16_t) + + NLA_HDRLEN * 4 + NLMSG_HDRLEN; ENTER(); @@ -1011,6 +1027,14 @@ failure: * @adapter: pointer to adapter context * @rsp_params: response parameters * + * Following vendor event is sent to cfg80211: + * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = + * QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE (4 bytes) + * * Return: none */ static void hdd_ndp_initiator_rsp_handler(hdd_adapter_t *adapter, @@ -1019,7 +1043,7 @@ static void hdd_ndp_initiator_rsp_handler(hdd_adapter_t *adapter, struct sk_buff *vendor_event; hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct ndp_initiator_rsp *rsp = rsp_params; - uint32_t data_len = (3 * sizeof(uint32_t)) + (2 * sizeof(uint16_t)) + + uint32_t data_len = (4 * sizeof(uint32_t)) + (1 * sizeof(uint16_t)) + NLMSG_HDRLEN + (5 * NLA_HDRLEN); ENTER(); @@ -1048,7 +1072,7 @@ static void hdd_ndp_initiator_rsp_handler(hdd_adapter_t *adapter, rsp->transaction_id)) goto ndp_initiator_rsp_nla_failed; - if (nla_put_u16(vendor_event, QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID, + if (nla_put_u32(vendor_event, QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID, rsp->ndp_instance_id)) goto ndp_initiator_rsp_nla_failed; @@ -1165,6 +1189,16 @@ static void hdd_ndp_peer_departed_ind_handler(hdd_adapter_t *adapter, * @adapter: pointer to adapter context * @ind_params: indication parameters * + * Following vendor event is sent to cfg80211: + * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = + * QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR (6 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR (IFNAMSIZ) + * QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO (ndp_app_info_len size) + * QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_RETURN_VALUE (4 bytes) + * * Return: none */ static void hdd_ndp_confirm_ind_handler(hdd_adapter_t *adapter, @@ -1269,7 +1303,7 @@ ndp_confirm_nla_failed: * * Following vendor event is sent to cfg80211: * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = - * QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND (4 bytes) * QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR (IFNAMSIZ) * QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID (2 bytes) * QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR (6 bytes) @@ -1332,9 +1366,9 @@ static void hdd_ndp_indication_handler(hdd_adapter_t *adapter, return; } - data_len = 3 * sizeof(uint32_t) + 2 * sizeof(uint16_t) + + data_len = 3 * sizeof(uint32_t) + sizeof(uint16_t) + 2 * VOS_MAC_ADDR_SIZE + IFNAMSIZ + - event->ndp_info.ndp_app_info_len + 9 * NLA_HDRLEN + + event->ndp_info.ndp_app_info_len + 8 * NLA_HDRLEN + NLMSG_HDRLEN; /* notify response to the upper layer */ @@ -1405,7 +1439,7 @@ ndp_indication_nla_failed: * * Following vendor event is sent to cfg80211: * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = - * QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE (4 bytes) * QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes) * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes) * QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE (4 bytes) @@ -1479,8 +1513,9 @@ ndp_responder_rsp_nla_failed: * * Following vendor event is sent to cfg80211: * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = + * QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE (4 bytes) * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes) - * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VELUE (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE (4 bytes) * QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes) * * Return: none @@ -1576,8 +1611,9 @@ ndp_end_rsp_nla_failed: * @ind_params: indication parameters * * Following vendor event is sent to cfg80211: - * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = QCA_WLAN_VENDOR_ATTR_NDP_END_IND (4 bytes) - * QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY (4 * NUM_INSTANCE_ID bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = + * QCA_WLAN_VENDOR_ATTR_NDP_END_IND (4 bytes) + * QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY (4 * no. of NDP instances) * * Return: none */ @@ -1628,7 +1664,7 @@ static void hdd_ndp_end_ind_handler(hdd_adapter_t *adapter, end_ind->ndp_map[i].num_active_ndp_sessions; } - data_len = (sizeof(uint32_t)) + NLMSG_HDRLEN + (2 * NLA_HDRLEN) + + data_len = NLMSG_HDRLEN + (2 * NLA_HDRLEN) + end_ind->num_ndp_ids * sizeof(*ndp_instance_array); vendor_event = cfg80211_vendor_event_alloc(hdd_ctx->wiphy, NULL, |
