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)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 16 Dec 2018 22:09:44 +0000 (22:09 +0000)
commit b5a8ffcae4103a9d823ea3aa3a761f65779fbe2a upstream.

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>
[bwh: Backported to 3.16: return directly rather than via "out" label]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/net/wireless/ath/wil6210/wmi.c

index 6cc0e182cc703c1f0c8ad243a008f8f6129590a6..94ecece554319799e7c065730b4dcdcebc51bd52 100644 (file)
@@ -958,7 +958,12 @@ 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 (len < ie_len)
+               return -EINVAL;
+
+       cmd = kzalloc(len, GFP_KERNEL);
        if (!cmd)
                return -ENOMEM;