From 4d090352a511fda15d0f3c76c1e627f27af2c885 Mon Sep 17 00:00:00 2001 From: Krishna Kumaar Natarajan Date: Mon, 26 Oct 2015 18:30:53 -0700 Subject: [PATCH] qcacld-3.0: Check tdls off-channel passed is not a DFS channel qcacld-2.0 to qcacld-3.0 propagation Add check to validate if non-DFS channel is passed as TDLS off channel via driver command and INI config. Change-Id: I6696c47d438bdcc1b8733241e60ca5c52fb1022f CRs-Fixed: 915972 --- core/hdd/src/wlan_hdd_ioctl.c | 6 ++++++ core/hdd/src/wlan_hdd_tdls.c | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index b08bd02030f5..6fc55c587922 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -5300,6 +5300,12 @@ static int drv_cmd_tdls_off_channel(hdd_adapter_t *adapter, if (ret != 1) return -EINVAL; + if (CDS_IS_DFS_CH(set_value)) { + hdd_err("DFS channel %d is passed for hdd_set_tdls_offchannel", + set_value); + return -EINVAL; + } + hddLog(LOG1, FL("Tdls offchannel num: %d"), set_value); ret = hdd_set_tdls_offchannel(hdd_ctx, set_value); diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 903fbfff4a73..3fd99256c057 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -4015,6 +4015,14 @@ int wlan_hdd_tdls_extctrl_config_peer(hdd_adapter_t *pAdapter, MAC_ADDR_ARRAY(peer)); return -EINVAL; } + + /* validate if off channel is DFS channel */ + if (CDS_IS_DFS_CH(chan)) { + hdd_err("Resetting TDLS off-channel from %d to %d", + chan, CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT); + chan = CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT; + } + if (0 != wlan_hdd_tdls_set_extctrl_param(pAdapter, peer, chan, max_latency, op_class, min_bandwidth)) { @@ -4265,6 +4273,16 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, pTdlsPeer-> op_class_for_pref_off_chan; + if (CDS_IS_DFS_CH(smeTdlsPeerStateParams. + peerCap.prefOffChanNum)) { + hdd_err("Resetting TDLS off-channel from %d to %d", + smeTdlsPeerStateParams.peerCap. + prefOffChanNum, + CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT); + smeTdlsPeerStateParams.peerCap.prefOffChanNum = + CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT; + } + CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_INFO, "%s: Peer " MAC_ADDRESS_STR