diff --git a/net/wireless/wext-sme.c b/net/wireless/wext-sme.c index 573b6b15a446..95180579e4f9 100644 --- a/net/wireless/wext-sme.c +++ b/net/wireless/wext-sme.c @@ -319,6 +319,17 @@ int cfg80211_wext_siwgenie(struct net_device *dev, return 0; if (ie_len) { + const struct element *elem; + + /* IE must have at least Type + Length bytes */ + if (ie_len < 2) + return -EINVAL; + for_each_element(elem, extra, ie_len) + /* nothing */ + + if (!for_each_element_completed(elem, extra, ie_len)) + return -EINVAL; + ie = kmemdup(extra, ie_len, GFP_KERNEL); if (!ie) return -ENOMEM;