Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0f0ec16 authored by bings's avatar bings Committed by Gerrit - the friendly Code Review server
Browse files

qcacmn: Use malloc to prevent stack overflow

For large local variable, it is better to use malloc to prevent the stack
overflow.

Change-Id: Ibf5f516132410122b730bfc1407ea14e0f26d630
CRs-Fixed: 2318354
parent 97c5884f
Loading
Loading
Loading
Loading
+26 −12
Original line number Diff line number Diff line
@@ -676,7 +676,7 @@ void utils_dfs_init_nol(struct wlan_objmgr_pdev *pdev)
	struct wlan_dfs *dfs;
	struct wlan_objmgr_psoc *psoc;
	qdf_device_t qdf_dev;
	struct dfs_nol_info dfs_nolinfo;
	struct dfs_nol_info *dfs_nolinfo;
	int len;

	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
@@ -693,16 +693,23 @@ void utils_dfs_init_nol(struct wlan_objmgr_pdev *pdev)
		return;
	}

	qdf_mem_zero(&dfs_nolinfo, sizeof(dfs_nolinfo));
	len = pld_wlan_get_dfs_nol(qdf_dev->dev, (void *)&dfs_nolinfo,
			(uint16_t)sizeof(dfs_nolinfo));
	dfs_nolinfo = qdf_mem_malloc(sizeof(*dfs_nolinfo));
	if (!dfs_nolinfo) {
		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,  "dfs_nolinfo alloc fail");
		return;
	}

	qdf_mem_zero(dfs_nolinfo, sizeof(*dfs_nolinfo));
	len = pld_wlan_get_dfs_nol(qdf_dev->dev, (void *)dfs_nolinfo,
				   (uint16_t)sizeof(*dfs_nolinfo));
	if (len > 0) {
		dfs_set_nol(dfs, dfs_nolinfo.dfs_nol, dfs_nolinfo.num_chans);
		dfs_set_nol(dfs, dfs_nolinfo->dfs_nol, dfs_nolinfo->num_chans);
		dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "nol channels in pld");
		DFS_PRINT_NOL_LOCKED(dfs);
	} else {
		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,  "no nol in pld");
	}
	qdf_mem_free(dfs_nolinfo);
}
#endif
qdf_export_symbol(utils_dfs_init_nol);
@@ -714,7 +721,7 @@ void utils_dfs_save_nol(struct wlan_objmgr_pdev *pdev)
#else
void utils_dfs_save_nol(struct wlan_objmgr_pdev *pdev)
{
	struct dfs_nol_info dfs_nolinfo;
	struct dfs_nol_info *dfs_nolinfo;
	struct wlan_dfs *dfs = NULL;
	struct wlan_objmgr_psoc *psoc;
	qdf_device_t qdf_dev;
@@ -738,18 +745,25 @@ void utils_dfs_save_nol(struct wlan_objmgr_pdev *pdev)
		return;
	}

	qdf_mem_zero(&dfs_nolinfo, sizeof(dfs_nolinfo));
	DFS_GET_NOL_LOCKED(dfs, dfs_nolinfo.dfs_nol, &num_chans);
	dfs_nolinfo = qdf_mem_malloc(sizeof(*dfs_nolinfo));
	if (!dfs_nolinfo) {
		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,  "dfs_nolinfo alloc fail");
		return;
	}

	qdf_mem_zero(dfs_nolinfo, sizeof(*dfs_nolinfo));
	DFS_GET_NOL_LOCKED(dfs, dfs_nolinfo->dfs_nol, &num_chans);
	if (num_chans > 0) {

		if (num_chans > DFS_MAX_NOL_CHANNEL)
			dfs_nolinfo.num_chans = DFS_MAX_NOL_CHANNEL;
			dfs_nolinfo->num_chans = DFS_MAX_NOL_CHANNEL;
		else
			dfs_nolinfo.num_chans = num_chans;
			dfs_nolinfo->num_chans = num_chans;

		pld_wlan_set_dfs_nol(qdf_dev->dev, (void *)&dfs_nolinfo,
				(uint16_t)sizeof(dfs_nolinfo));
		pld_wlan_set_dfs_nol(qdf_dev->dev, (void *)dfs_nolinfo,
				     (uint16_t)sizeof(*dfs_nolinfo));
	}
	qdf_mem_free(dfs_nolinfo);
}
#endif
qdf_export_symbol(utils_dfs_save_nol);