From d14304bb6a397906d2d5ca99788380e6d621f2c4 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Fri, 17 Mar 2017 11:18:40 +0530 Subject: [PATCH] qcacld-3.0: Fix QDF ASSERT in wma_chan_phy_mode during driver load If channel received in OEM channel info req is invalid for the current country code the channel width received will be invalid. When this invalid channel width is passed to wma_chan_phy_mode, it cause QDF ASSERT. To fix this if channel width is invalid set the phy mode invalid. Change-Id: Iafa29be61c94ac6138162d47c8efda7504f0acf2 CRs-Fixed: 2021053 --- core/hdd/src/wlan_hdd_oemdata.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/core/hdd/src/wlan_hdd_oemdata.c b/core/hdd/src/wlan_hdd_oemdata.c index 90b44dfacf4e..0de5a2f1eb53 100644 --- a/core/hdd/src/wlan_hdd_oemdata.c +++ b/core/hdd/src/wlan_hdd_oemdata.c @@ -429,15 +429,27 @@ static void hdd_update_channel_bw_info(hdd_context_t *hdd_ctx, ch_params.ch_width = CH_WIDTH_MAX; cds_set_channel_params(chan, sec_ch_2g, &ch_params); + if (ch_params.center_freq_seg0) hdd_chan_info->band_center_freq1 = cds_chan_to_freq(ch_params.center_freq_seg0); - hdd_info("chan %d dot11_mode %d ch_width %d sec offset %d freq_seg0 %d", - chan, wni_dot11_mode, ch_params.ch_width, - ch_params.sec_ch_offset, hdd_chan_info->band_center_freq1); + if (ch_params.ch_width < CH_WIDTH_INVALID) + phy_mode = wma_chan_phy_mode(chan, + ch_params.ch_width, wni_dot11_mode); + else + /* + * If channel width is CH_WIDTH_INVALID, It mean channel is + * invalid and should not have been received in channel info + * req. Set invalid phymode in this case. + */ + phy_mode = MODE_UNKNOWN; + + hdd_info("chan %d dot11_mode %d ch_width %d sec offset %d freq_seg0 %d phy_mode %d", + chan, wni_dot11_mode, ch_params.ch_width, + ch_params.sec_ch_offset, + hdd_chan_info->band_center_freq1, phy_mode); - phy_mode = wma_chan_phy_mode(chan, ch_params.ch_width, wni_dot11_mode); WMI_SET_CHANNEL_MODE(hdd_chan_info, phy_mode); }