qcacmn: DFS kernel panic fixed
NULL pointer dereference is fixed. Change-Id: I6c5dce998dd276306a42a14253450965329afd56 CRs-Fixed: 2001106
Этот коммит содержится в:

коммит произвёл
snandini

родитель
8b8334baa4
Коммит
b4ebf34ea2
@@ -428,36 +428,38 @@ struct dfs_state *dfs_getchanstate(struct wlan_dfs *dfs, uint8_t *index,
|
||||
int ext_chan_flag)
|
||||
{
|
||||
struct dfs_state *rs = NULL;
|
||||
struct dfs_ieee80211_channel *cmp_ch = NULL;
|
||||
struct dfs_ieee80211_channel *cmp_ch, cmp_ch1;
|
||||
int i;
|
||||
QDF_STATUS err;
|
||||
|
||||
if (dfs == NULL) {
|
||||
DFS_DPRINTK(dfs, WLAN_DEBUG_DFS, "%s: dfs is NULL\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cmp_ch = &cmp_ch1;
|
||||
if (ext_chan_flag) {
|
||||
dfs_mlme_get_extchan(dfs->dfs_pdev_obj,
|
||||
err = dfs_mlme_get_extchan(dfs->dfs_pdev_obj,
|
||||
&(cmp_ch->ic_freq),
|
||||
&(cmp_ch->ic_flags),
|
||||
&(cmp_ch->ic_flagext),
|
||||
&(cmp_ch->ic_ieee),
|
||||
&(cmp_ch->ic_vhtop_ch_freq_seg1),
|
||||
&(cmp_ch->ic_vhtop_ch_freq_seg2));
|
||||
if (cmp_ch) {
|
||||
|
||||
if (err == QDF_STATUS_SUCCESS) {
|
||||
DFS_DPRINTK(dfs, WLAN_DEBUG_DFS2,
|
||||
"Extension channel freq = %u flags=0x%x\n",
|
||||
cmp_ch->ic_freq, cmp_ch->ic_flagext);
|
||||
} else {
|
||||
} else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
} else {
|
||||
cmp_ch = dfs->dfs_curchan;
|
||||
DFS_DPRINTK(dfs, WLAN_DEBUG_DFS2,
|
||||
"Primary channel freq = %u flags=0x%x\n",
|
||||
cmp_ch->ic_freq, cmp_ch->ic_flagext);
|
||||
}
|
||||
|
||||
for (i = 0; i < DFS_NUM_RADAR_STATES; i++) {
|
||||
if ((dfs->dfs_radar[i].rs_chan.ic_freq == cmp_ch->ic_freq) &&
|
||||
(dfs->dfs_radar[i].rs_chan.ic_flags == cmp_ch->ic_flags)
|
||||
@@ -494,7 +496,8 @@ void dfs_radar_enable(struct wlan_dfs *dfs, int no_cac, uint32_t opmode)
|
||||
{
|
||||
int is_ext_ch;
|
||||
int is_fastclk = 0;
|
||||
struct dfs_ieee80211_channel *ext_ch = NULL;
|
||||
struct dfs_ieee80211_channel *ext_ch, extchan;
|
||||
QDF_STATUS err = QDF_STATUS_E_FAILURE;
|
||||
|
||||
if (dfs == NULL) {
|
||||
DFS_DPRINTK(dfs, WLAN_DEBUG_DFS1,
|
||||
@@ -522,22 +525,26 @@ void dfs_radar_enable(struct wlan_dfs *dfs, int no_cac, uint32_t opmode)
|
||||
dfs->dfs_proc_phyerr |= DFS_RADAR_EN;
|
||||
dfs->dfs_proc_phyerr |= DFS_SECOND_SEGMENT_RADAR_EN;
|
||||
|
||||
ext_ch = &extchan;
|
||||
if (is_ext_ch)
|
||||
dfs_mlme_get_extchan(dfs->dfs_pdev_obj,
|
||||
&(ext_ch->ic_freq),
|
||||
&(ext_ch->ic_flags),
|
||||
&(ext_ch->ic_flagext),
|
||||
&(ext_ch->ic_ieee),
|
||||
&(ext_ch->ic_vhtop_ch_freq_seg1),
|
||||
&(ext_ch->ic_vhtop_ch_freq_seg2));
|
||||
err = dfs_mlme_get_extchan(dfs->dfs_pdev_obj,
|
||||
&(ext_ch->ic_freq),
|
||||
&(ext_ch->ic_flags),
|
||||
&(ext_ch->ic_flagext),
|
||||
&(ext_ch->ic_ieee),
|
||||
&(ext_ch->ic_vhtop_ch_freq_seg1),
|
||||
&(ext_ch->ic_vhtop_ch_freq_seg2));
|
||||
|
||||
|
||||
dfs_reset_alldelaylines(dfs);
|
||||
|
||||
rs_pri = dfs_getchanstate(dfs, &index_pri, 0);
|
||||
if (ext_ch)
|
||||
if (err == QDF_STATUS_SUCCESS) {
|
||||
rs_ext = dfs_getchanstate(dfs, &index_ext, 1);
|
||||
}
|
||||
|
||||
if (rs_pri != NULL && ((ext_ch == NULL) || (rs_ext != NULL))) {
|
||||
if (rs_pri != NULL && ((err == QDF_STATUS_E_FAILURE) ||
|
||||
(rs_ext != NULL))) {
|
||||
struct wlan_dfs_phyerr_param pe;
|
||||
|
||||
qdf_mem_set(&pe, '\0', sizeof(pe));
|
||||
|
@@ -128,7 +128,7 @@ void dfs_mlme_find_any_valid_channel(struct wlan_objmgr_pdev *pdev,
|
||||
* @ic_vhtop_ch_freq_seg2: Channel Center frequency applicable for 80+80MHz
|
||||
* mode of operation.
|
||||
*/
|
||||
void dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
|
||||
QDF_STATUS dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
|
@@ -172,7 +172,7 @@ void dfs_mlme_find_any_valid_channel(struct wlan_objmgr_pdev *pdev,
|
||||
ret_val);
|
||||
}
|
||||
|
||||
void dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
|
||||
QDF_STATUS dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
@@ -181,13 +181,15 @@ void dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_get_extchan != NULL)
|
||||
global_dfs_to_mlme.mlme_get_extchan(pdev,
|
||||
return global_dfs_to_mlme.mlme_get_extchan(pdev,
|
||||
ic_freq,
|
||||
ic_flags,
|
||||
ic_flagext,
|
||||
ic_ieee,
|
||||
ic_vhtop_ch_freq_seg1,
|
||||
ic_vhtop_ch_freq_seg2);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
void dfs_mlme_set_no_chans_available(struct wlan_objmgr_pdev *pdev,
|
||||
|
Ссылка в новой задаче
Block a user