First of all, the subject doesn't make a lot of sense? Secondly, for a fix the code is fine I guess, but: > rate_ie = (void *)cfg80211_find_ie(WLAN_EID_EXT_SUPP_RATES, > params->beacon.tail, > params->beacon.tail_len); consider removing struct ieee_types_header from your driver, and using struct element from <linux/ieee80211.h> instead. This also comes with cfg80211_find_elem() that returns a suitably typed pointer, so you don't need any casts. > if (vendor_ie) { > wmm_ie = vendor_ie; > + if (*(wmm_ie + 1) > sizeof(struct mwifiex_types_wmm_info)) > + return; and using it here would be a whole lot easier to understand too :) johannes