mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 16:46:15 -04:00
qcacld-3.0: Check vdev from CDP vdev_id API
Check for validity of vdev obtained from the CDP cdp_get_vdev_from_vdev_id API. Change-Id: Ie7fb99a0e08135bd3f2cc6b63070a4bd72df943a CRs-Fixed: 2434583
This commit is contained in:
parent
9bfde90005
commit
e1b8602571
5 changed files with 51 additions and 26 deletions
|
|
@ -354,13 +354,15 @@ static enum wlan_ipa_forward_type wlan_ipa_intrabss_forward(
|
|||
if ((desc & FW_RX_DESC_FORWARD_M)) {
|
||||
void *vdev = cdp_get_vdev_from_vdev_id(soc, pdev,
|
||||
iface_ctx->session_id);
|
||||
if (!vdev)
|
||||
goto drop_pkt;
|
||||
|
||||
if (cdp_tx_desc_thresh_reached(soc, vdev)) {
|
||||
/* Drop the packet*/
|
||||
ipa_ctx->stats.num_tx_fwd_err++;
|
||||
dev_kfree_skb_any(skb);
|
||||
ret = WLAN_IPA_FORWARD_PKT_DISCARD;
|
||||
return ret;
|
||||
goto drop_pkt;
|
||||
}
|
||||
|
||||
ipa_debug_rl("Forward packet to Tx (fw_desc=%d)", desc);
|
||||
ipa_ctx->ipa_tx_forward++;
|
||||
|
||||
|
|
@ -380,7 +382,11 @@ static enum wlan_ipa_forward_type wlan_ipa_intrabss_forward(
|
|||
ret = WLAN_IPA_FORWARD_PKT_LOCAL_STACK;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
||||
drop_pkt:
|
||||
dev_kfree_skb_any(skb);
|
||||
ret = WLAN_IPA_FORWARD_PKT_DISCARD;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2126,7 +2126,6 @@ QDF_STATUS hdd_roam_register_sta(struct hdd_adapter *adapter,
|
|||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
if (!adapter->txrx_vdev) {
|
||||
hdd_err("%s find vdev fail", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
|
|
@ -4020,6 +4019,7 @@ QDF_STATUS hdd_roam_register_tdlssta(struct hdd_adapter *adapter,
|
|||
struct ol_txrx_ops txrx_ops;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
|
||||
/*
|
||||
* TDLS sta in BSS should be set as STA type TDLS and STA MAC should
|
||||
|
|
@ -4039,12 +4039,16 @@ QDF_STATUS hdd_roam_register_tdlssta(struct hdd_adapter *adapter,
|
|||
txrx_ops.rx.rx = hdd_rx_packet_cbk;
|
||||
txrx_ops.rx.rx_stack = NULL;
|
||||
}
|
||||
txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
if (!txrx_vdev)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
cdp_vdev_register(soc,
|
||||
(struct cdp_vdev *)cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev, adapter->vdev_id),
|
||||
adapter, (struct cdp_ctrl_objmgr_vdev *)adapter->vdev,
|
||||
&txrx_ops);
|
||||
cdp_vdev_register(soc, txrx_vdev,
|
||||
adapter,
|
||||
(struct cdp_ctrl_objmgr_vdev *)adapter->vdev,
|
||||
&txrx_ops);
|
||||
adapter->tx_fn = txrx_ops.tx.tx;
|
||||
txrx_ops.rx.stats_rx = hdd_tx_rx_collect_connectivity_stats_info;
|
||||
|
||||
|
|
|
|||
|
|
@ -4470,6 +4470,7 @@ static int __wlan_hdd_cfg80211_handle_wisa_cmd(struct wiphy *wiphy,
|
|||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
mac_handle_t mac_handle;
|
||||
struct cdp_vdev *txrx_vdev = NULL;
|
||||
|
||||
hdd_enter_dev(dev);
|
||||
ret_val = wlan_hdd_validate_context(hdd_ctx);
|
||||
|
|
@ -4503,12 +4504,15 @@ static int __wlan_hdd_cfg80211_handle_wisa_cmd(struct wiphy *wiphy,
|
|||
hdd_err("Unable to set WISA mode: %d to FW", wisa_mode);
|
||||
ret_val = -EINVAL;
|
||||
}
|
||||
if (QDF_IS_STATUS_SUCCESS(status) || wisa_mode == false)
|
||||
cdp_set_wisa_mode(soc,
|
||||
(struct cdp_vdev *)cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id),
|
||||
wisa_mode);
|
||||
if (QDF_IS_STATUS_SUCCESS(status) || !wisa_mode) {
|
||||
txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
if (!txrx_vdev)
|
||||
ret_val = -EINVAL;
|
||||
else
|
||||
cdp_set_wisa_mode(soc, txrx_vdev, wisa_mode);
|
||||
}
|
||||
err:
|
||||
hdd_exit();
|
||||
return ret_val;
|
||||
|
|
|
|||
|
|
@ -222,6 +222,7 @@ static int hdd_ocb_register_sta(struct hdd_adapter *adapter)
|
|||
struct ol_txrx_ops txrx_ops;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
struct cdp_vdev *vdev;
|
||||
|
||||
qdf_status = cdp_peer_register_ocb_peer(soc,
|
||||
adapter->mac_addr.bytes,
|
||||
|
|
@ -239,16 +240,19 @@ static int hdd_ocb_register_sta(struct hdd_adapter *adapter)
|
|||
/* Register the vdev transmit and receive functions */
|
||||
qdf_mem_zero(&txrx_ops, sizeof(txrx_ops));
|
||||
txrx_ops.rx.rx = hdd_rx_packet_cbk;
|
||||
cdp_vdev_register(soc,
|
||||
(struct cdp_vdev *)cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev, adapter->vdev_id),
|
||||
adapter, (struct cdp_ctrl_objmgr_vdev *)adapter->vdev,
|
||||
&txrx_ops);
|
||||
vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
if (!vdev)
|
||||
return -EINVAL;
|
||||
|
||||
cdp_vdev_register(soc, vdev, adapter,
|
||||
(struct cdp_ctrl_objmgr_vdev *)adapter->vdev,
|
||||
&txrx_ops);
|
||||
txrx_ops.rx.stats_rx = hdd_tx_rx_collect_connectivity_stats_info;
|
||||
adapter->tx_fn = txrx_ops.tx.tx;
|
||||
|
||||
qdf_status = cdp_peer_register(soc,
|
||||
(struct cdp_pdev *)pdev, &sta_desc);
|
||||
qdf_status = cdp_peer_register(soc, (struct cdp_pdev *)pdev, &sta_desc);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
hdd_err("Failed to register. Status= %d [0x%08X]",
|
||||
qdf_status, qdf_status);
|
||||
|
|
|
|||
|
|
@ -1013,6 +1013,7 @@ QDF_STATUS hdd_softap_register_sta(struct hdd_adapter *adapter,
|
|||
struct ol_txrx_ops txrx_ops;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
struct cdp_vdev *txrx_vdev = NULL;
|
||||
|
||||
hdd_info("STA:%u, Auth:%u, Priv:%u, WMM:%u",
|
||||
sta_id, auth_required, privacy_required, wmm_enabled);
|
||||
|
|
@ -1048,11 +1049,17 @@ QDF_STATUS hdd_softap_register_sta(struct hdd_adapter *adapter,
|
|||
txrx_ops.rx.rx_stack = NULL;
|
||||
}
|
||||
|
||||
txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
if (!txrx_vdev)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
cdp_vdev_register(soc,
|
||||
(struct cdp_vdev *)cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev, adapter->vdev_id),
|
||||
adapter, (struct cdp_ctrl_objmgr_vdev *)adapter->vdev,
|
||||
&txrx_ops);
|
||||
txrx_vdev,
|
||||
adapter,
|
||||
(struct cdp_ctrl_objmgr_vdev *)adapter->vdev,
|
||||
&txrx_ops);
|
||||
adapter->txrx_vdev = (void *)cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
|
|
|
|||
Loading…
Reference in a new issue