]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
wil6210: missing length check in wmi_set_ie
authorLior David <qca_liord@qca.qualcomm.com>
Tue, 14 Nov 2017 13:25:39 +0000 (15:25 +0200)
committerBrian Maly <brian.maly@oracle.com>
Mon, 17 Dec 2018 23:59:20 +0000 (18:59 -0500)
Add a length check in wmi_set_ie to detect unsigned integer
overflow.

Signed-off-by: Lior David <qca_liord@qca.qualcomm.com>
Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
(cherry picked from commit b5a8ffcae4103a9d823ea3aa3a761f65779fbe2a)

Orabug: 28951265
CVE: CVE-2018-5848

Signed-off-by: Dan Duval <dan.duval@oracle.com>
Reviewed-by: Jack Vogel <jack.vogel@oracle.com>
Conflict:

drivers/net/wireless/ath/wil6210/wmi.c

Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/net/wireless/ath/wil6210/wmi.c

index 9fe2085be2c5b86d77e9346f003c7f38656ff3d3..45bf8781ddd44793fad634b9f3c4dd5d9475e98a 100644 (file)
@@ -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;
 }