* [PATCH net-next] mwifiex: Prevent memory corruption handling keys
@ 2020-07-08 11:58 Dan Carpenter
2020-07-09 3:43 ` [EXT] " Ganapathi Bhat
2020-07-15 9:13 ` Kalle Valo
0 siblings, 2 replies; 3+ messages in thread
From: Dan Carpenter @ 2020-07-08 11:58 UTC (permalink / raw)
To: Amitkumar Karwar
Cc: Ganapathi Bhat, Xinming Hu, Kalle Valo, Jakub Kicinski,
John W. Linville, Bing Zhao, Nishant Sarmukadam, Marc Yang,
Frank Huang, linux-wireless, kernel-janitors
The length of the key comes from the network and it's a 16 bit number. It
needs to be capped to prevent a buffer overflow.
Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
This is from static analysis. Please review it carefully.
.../wireless/marvell/mwifiex/sta_cmdresp.c | 22 +++++++++++++------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
index f21660149f58..267b02cde30c 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
@@ -580,6 +580,11 @@ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv,
{
struct host_cmd_ds_802_11_key_material *key =
&resp->params.key_material;
+ int len;
+
+ len = le16_to_cpu(key->key_param_set.key_len);
+ if (len > sizeof(key->key_param_set.key))
+ return -EINVAL;
if (le16_to_cpu(key->action) == HostCmd_ACT_GEN_SET) {
if ((le16_to_cpu(key->key_param_set.key_info) & KEY_MCAST)) {
@@ -593,9 +598,8 @@ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv,
memset(priv->aes_key.key_param_set.key, 0,
sizeof(key->key_param_set.key));
- priv->aes_key.key_param_set.key_len = key->key_param_set.key_len;
- memcpy(priv->aes_key.key_param_set.key, key->key_param_set.key,
- le16_to_cpu(priv->aes_key.key_param_set.key_len));
+ priv->aes_key.key_param_set.key_len = cpu_to_le16(len);
+ memcpy(priv->aes_key.key_param_set.key, key->key_param_set.key, len);
return 0;
}
@@ -610,9 +614,14 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp)
{
struct host_cmd_ds_802_11_key_material_v2 *key_v2;
- __le16 len;
+ int len;
key_v2 = &resp->params.key_material_v2;
+
+ len = le16_to_cpu(key_v2->key_param_set.key_params.aes.key_len);
+ if (len > WLAN_KEY_LEN_CCMP)
+ return -EINVAL;
+
if (le16_to_cpu(key_v2->action) == HostCmd_ACT_GEN_SET) {
if ((le16_to_cpu(key_v2->key_param_set.key_info) & KEY_MCAST)) {
mwifiex_dbg(priv->adapter, INFO, "info: key: GTK is set\n");
@@ -628,10 +637,9 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv,
memset(priv->aes_key_v2.key_param_set.key_params.aes.key, 0,
WLAN_KEY_LEN_CCMP);
priv->aes_key_v2.key_param_set.key_params.aes.key_len =
- key_v2->key_param_set.key_params.aes.key_len;
- len = priv->aes_key_v2.key_param_set.key_params.aes.key_len;
+ cpu_to_le16(len);
memcpy(priv->aes_key_v2.key_param_set.key_params.aes.key,
- key_v2->key_param_set.key_params.aes.key, le16_to_cpu(len));
+ key_v2->key_param_set.key_params.aes.key, len);
return 0;
}
--
2.27.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [EXT] [PATCH net-next] mwifiex: Prevent memory corruption handling keys
2020-07-08 11:58 [PATCH net-next] mwifiex: Prevent memory corruption handling keys Dan Carpenter
@ 2020-07-09 3:43 ` Ganapathi Bhat
2020-07-15 9:13 ` Kalle Valo
1 sibling, 0 replies; 3+ messages in thread
From: Ganapathi Bhat @ 2020-07-09 3:43 UTC (permalink / raw)
To: Dan Carpenter, Amitkumar Karwar
Cc: Xinming Hu, Kalle Valo, Jakub Kicinski, John W. Linville,
Bing Zhao, Nishant Sarmukadam, Marc Yang, frankh, linux-wireless,
kernel-janitors
Hi Dan,
> The length of the key comes from the network and it's a 16 bit number. It
> needs to be capped to prevent a buffer overflow.
Thank you for this change.
Acked-by: Ganapathi Bhat <ganapathi.bhat@nxp.com>
Regards,
Ganapathi
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] mwifiex: Prevent memory corruption handling keys
2020-07-08 11:58 [PATCH net-next] mwifiex: Prevent memory corruption handling keys Dan Carpenter
2020-07-09 3:43 ` [EXT] " Ganapathi Bhat
@ 2020-07-15 9:13 ` Kalle Valo
1 sibling, 0 replies; 3+ messages in thread
From: Kalle Valo @ 2020-07-15 9:13 UTC (permalink / raw)
To: Dan Carpenter
Cc: Amitkumar Karwar, Ganapathi Bhat, Xinming Hu, Jakub Kicinski,
John W. Linville, Bing Zhao, Nishant Sarmukadam, Marc Yang,
Frank Huang, linux-wireless, kernel-janitors
Dan Carpenter <dan.carpenter@oracle.com> wrote:
> The length of the key comes from the network and it's a 16 bit number. It
> needs to be capped to prevent a buffer overflow.
>
> Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> Acked-by: Ganapathi Bhat <ganapathi.bhat@nxp.com>
Patch applied to wireless-drivers-next.git, thanks.
e18696786548 mwifiex: Prevent memory corruption handling keys
--
https://patchwork.kernel.org/patch/11651443/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-07-15 9:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-08 11:58 [PATCH net-next] mwifiex: Prevent memory corruption handling keys Dan Carpenter
2020-07-09 3:43 ` [EXT] " Ganapathi Bhat
2020-07-15 9:13 ` Kalle Valo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).