Commit 2131d3c2 authored by Pontus Fuchs's avatar Pontus Fuchs Committed by Luciano Coelho

wl12xx: Validate FEM index from ini file and FW

Check for out of bound FEM index to prevent reading beyond ini
memory end.
Signed-off-by: default avatarPontus Fuchs <pontus.fuchs@gmail.com>
Cc: stable@kernel.org
Reviewed-by: default avatarLuciano Coelho <coelho@ti.com>
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent e4da3fbf
...@@ -121,6 +121,11 @@ int wl1271_cmd_general_parms(struct wl1271 *wl) ...@@ -121,6 +121,11 @@ int wl1271_cmd_general_parms(struct wl1271 *wl)
if (!wl->nvs) if (!wl->nvs)
return -ENODEV; return -ENODEV;
if (gp->tx_bip_fem_manufacturer >= WL1271_INI_FEM_MODULE_COUNT) {
wl1271_warning("FEM index from INI out of bounds");
return -EINVAL;
}
gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL); gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL);
if (!gen_parms) if (!gen_parms)
return -ENOMEM; return -ENOMEM;
...@@ -144,6 +149,12 @@ int wl1271_cmd_general_parms(struct wl1271 *wl) ...@@ -144,6 +149,12 @@ int wl1271_cmd_general_parms(struct wl1271 *wl)
gp->tx_bip_fem_manufacturer = gp->tx_bip_fem_manufacturer =
gen_parms->general_params.tx_bip_fem_manufacturer; gen_parms->general_params.tx_bip_fem_manufacturer;
if (gp->tx_bip_fem_manufacturer >= WL1271_INI_FEM_MODULE_COUNT) {
wl1271_warning("FEM index from FW out of bounds");
ret = -EINVAL;
goto out;
}
wl1271_debug(DEBUG_CMD, "FEM autodetect: %s, manufacturer: %d\n", wl1271_debug(DEBUG_CMD, "FEM autodetect: %s, manufacturer: %d\n",
answer ? "auto" : "manual", gp->tx_bip_fem_manufacturer); answer ? "auto" : "manual", gp->tx_bip_fem_manufacturer);
...@@ -163,6 +174,11 @@ int wl128x_cmd_general_parms(struct wl1271 *wl) ...@@ -163,6 +174,11 @@ int wl128x_cmd_general_parms(struct wl1271 *wl)
if (!wl->nvs) if (!wl->nvs)
return -ENODEV; return -ENODEV;
if (gp->tx_bip_fem_manufacturer >= WL1271_INI_FEM_MODULE_COUNT) {
wl1271_warning("FEM index from ini out of bounds");
return -EINVAL;
}
gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL); gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL);
if (!gen_parms) if (!gen_parms)
return -ENOMEM; return -ENOMEM;
...@@ -187,6 +203,12 @@ int wl128x_cmd_general_parms(struct wl1271 *wl) ...@@ -187,6 +203,12 @@ int wl128x_cmd_general_parms(struct wl1271 *wl)
gp->tx_bip_fem_manufacturer = gp->tx_bip_fem_manufacturer =
gen_parms->general_params.tx_bip_fem_manufacturer; gen_parms->general_params.tx_bip_fem_manufacturer;
if (gp->tx_bip_fem_manufacturer >= WL1271_INI_FEM_MODULE_COUNT) {
wl1271_warning("FEM index from FW out of bounds");
ret = -EINVAL;
goto out;
}
wl1271_debug(DEBUG_CMD, "FEM autodetect: %s, manufacturer: %d\n", wl1271_debug(DEBUG_CMD, "FEM autodetect: %s, manufacturer: %d\n",
answer ? "auto" : "manual", gp->tx_bip_fem_manufacturer); answer ? "auto" : "manual", gp->tx_bip_fem_manufacturer);
......
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