Commit 9b1a0a77 authored by Eliad Peller's avatar Eliad Peller Committed by Luciano Coelho

wlcore: consider single fw case

When a single fw is being used for both single-role
and multi-role cases (e.g. 18xx), wl->mr_fw_name is
NULL, which results in NULL dereference while trying
to load the multi-role fw.

In this case, always use the single-role fw, and avoid
redundant fw switch by checking for this case in
wl12xx_need_fw_change() as well.
Signed-off-by: default avatarEliad Peller <eliad@wizery.com>
Signed-off-by: default avatarLuciano Coelho <luca@coelho.fi>
parent e1c497c3
...@@ -696,7 +696,7 @@ static int wl12xx_fetch_firmware(struct wl1271 *wl, bool plt) ...@@ -696,7 +696,7 @@ static int wl12xx_fetch_firmware(struct wl1271 *wl, bool plt)
* we can't call wl12xx_get_vif_count() here because * we can't call wl12xx_get_vif_count() here because
* wl->mutex is taken, so use the cached last_vif_count value * wl->mutex is taken, so use the cached last_vif_count value
*/ */
if (wl->last_vif_count > 1) { if (wl->last_vif_count > 1 && wl->mr_fw_name) {
fw_type = WL12XX_FW_TYPE_MULTI; fw_type = WL12XX_FW_TYPE_MULTI;
fw_name = wl->mr_fw_name; fw_name = wl->mr_fw_name;
} else { } else {
...@@ -2170,6 +2170,10 @@ static bool wl12xx_need_fw_change(struct wl1271 *wl, ...@@ -2170,6 +2170,10 @@ static bool wl12xx_need_fw_change(struct wl1271 *wl,
if (wl->state == WL1271_STATE_OFF) if (wl->state == WL1271_STATE_OFF)
return false; return false;
/* no need for fw change if a single fw is used */
if (!wl->mr_fw_name)
return false;
if (vif_count > 1 && current_fw == WL12XX_FW_TYPE_NORMAL) if (vif_count > 1 && current_fw == WL12XX_FW_TYPE_NORMAL)
return true; return true;
if (vif_count <= 1 && current_fw == WL12XX_FW_TYPE_MULTI) if (vif_count <= 1 && current_fw == WL12XX_FW_TYPE_MULTI)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment