From: Lior David Date: Tue, 14 Nov 2017 13:25:39 +0000 (+0200) Subject: wil6210: missing length check in wmi_set_ie X-Git-Tag: v4.1.12-124.31.3~375 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=c78832e258251d052decfec471ace20fa27b8e71;p=users%2Fjedix%2Flinux-maple.git wil6210: missing length check in wmi_set_ie Add a length check in wmi_set_ie to detect unsigned integer overflow. Signed-off-by: Lior David Signed-off-by: Maya Erez Signed-off-by: Kalle Valo (cherry picked from commit b5a8ffcae4103a9d823ea3aa3a761f65779fbe2a) Orabug: 28951265 CVE: CVE-2018-5848 Signed-off-by: Dan Duval Reviewed-by: Jack Vogel Conflict: drivers/net/wireless/ath/wil6210/wmi.c Signed-off-by: Brian Maly --- diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c index 9fe2085be2c5..45bf8781ddd4 100644 --- a/drivers/net/wireless/ath/wil6210/wmi.c +++ b/drivers/net/wireless/ath/wil6210/wmi.c @@ -1020,10 +1020,18 @@ int wmi_set_ie(struct wil6210_priv *wil, u8 type, u16 ie_len, const void *ie) { int rc; u16 len = sizeof(struct wmi_set_appie_cmd) + ie_len; - struct wmi_set_appie_cmd *cmd = kzalloc(len, GFP_KERNEL); + struct wmi_set_appie_cmd *cmd; - if (!cmd) - return -ENOMEM; + if (len < ie_len) { + rc = -EINVAL; + goto out; + } + + cmd = kzalloc(len, GFP_KERNEL); + if (!cmd) { + rc = -ENOMEM; + goto out; + } if (!ie) ie_len = 0; @@ -1034,6 +1042,7 @@ int wmi_set_ie(struct wil6210_priv *wil, u8 type, u16 ie_len, const void *ie) rc = wmi_send(wil, WMI_SET_APPIE_CMDID, cmd, len); kfree(cmd); +out: return rc; }