qcacmn: Reset delayline even for zero bin5 radars

It is valid for dfs->dfs_rinfo.rn_numbin5radars to be 0. If it is zero
then the malloc returns NULL and we skip dfs_reset_alldelaylines.

Skip dfs_reset_alldelaylines in case of non-zero malloc failures. Also
move the dfs->dfs_b5radars NULL check just before accessing
dfs->dfs_b5radars memory.

Change-Id: I0aba9d2357672e2c5bc6c5c3857cb06194381e2f
CRs-Fixed: 2215846
This commit is contained in:
Abhijit Pradhan
2018-04-04 12:34:04 +05:30
gecommit door nshrivas
bovenliggende 73deb9aa73
commit 2ed63d0e1a

Bestand weergeven

@@ -61,12 +61,6 @@ void dfs_reset_alldelaylines(struct wlan_dfs *dfs)
return;
}
if (!(dfs->dfs_b5radars)) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "pl==NULL, b5radars=%pK",
dfs->dfs_b5radars);
return;
}
/* Reset the pulse log. */
pl->pl_firstelem = pl->pl_numelems = 0;
pl->pl_lastelem = DFS_MAX_PULSE_BUFFER_MASK;
@@ -78,6 +72,12 @@ void dfs_reset_alldelaylines(struct wlan_dfs *dfs)
}
}
if (!(dfs->dfs_b5radars)) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "b5radars=%pK",
dfs->dfs_b5radars);
return;
}
for (i = 0; i < dfs->dfs_rinfo.rn_numbin5radars; i++) {
qdf_mem_zero(&(dfs->dfs_b5radars[i].br_elems[0]),
sizeof(struct dfs_bin5elem) * DFS_MAX_B5_SIZE);
@@ -337,16 +337,25 @@ int dfs_init_radar_filters(struct wlan_dfs *dfs,
dfs_print_filters(dfs);
dfs->dfs_rinfo.rn_numbin5radars = numb5radars;
if (dfs->dfs_b5radars)
if (dfs->dfs_b5radars) {
qdf_mem_free(dfs->dfs_b5radars);
dfs->dfs_b5radars = (struct dfs_bin5radars *)qdf_mem_malloc(
numb5radars * sizeof(struct dfs_bin5radars));
if (!(dfs->dfs_b5radars)) {
dfs_alert(dfs, WLAN_DEBUG_DFS_ALWAYS,
"cannot allocate memory for bin5 radars");
goto bad4;
dfs->dfs_b5radars = NULL;
}
if (numb5radars) {
dfs->dfs_b5radars = (struct dfs_bin5radars *)qdf_mem_malloc(
numb5radars * sizeof(struct dfs_bin5radars));
/*
* Malloc can return NULL if numb5radars is zero. But we still
* want to reset the delay lines.
*/
if (!(dfs->dfs_b5radars)) {
dfs_alert(dfs, WLAN_DEBUG_DFS_ALWAYS,
"cannot allocate memory for bin5 radars");
goto bad4;
}
}
for (n = 0; n < numb5radars; n++) {
dfs->dfs_b5radars[n].br_pulse = b5pulses[n];
dfs->dfs_b5radars[n].br_pulse.b5_timewindow *= 1000000;