fix hostapd/madwifi crash (#247)
[oweals/openwrt.git] / openwrt / target / linux / package / madwifi / patches / 103-wpa_crash.patch
1 diff -urN madwifi.old/net80211/ieee80211_ioctl.h madwifi.dev/net80211/ieee80211_ioctl.h
2 --- madwifi.old/net80211/ieee80211_ioctl.h      2005-12-07 03:53:07.000000000 +0100
3 +++ madwifi.dev/net80211/ieee80211_ioctl.h      2006-01-31 22:33:21.282491500 +0100
4 @@ -277,6 +277,7 @@
5  struct ieee80211req_wpaie {
6         u_int8_t        wpa_macaddr[IEEE80211_ADDR_LEN];
7         u_int8_t        wpa_ie[IEEE80211_MAX_OPT_IE];
8 +       u_int8_t        rsn_ie[IEEE80211_MAX_OPT_IE];
9  };
10  
11  /*
12 diff -urN madwifi.old/net80211/ieee80211_wireless.c madwifi.dev/net80211/ieee80211_wireless.c
13 --- madwifi.old/net80211/ieee80211_wireless.c   2006-01-23 08:07:51.000000000 +0100
14 +++ madwifi.dev/net80211/ieee80211_wireless.c   2006-01-31 22:33:21.286491750 +0100
15 @@ -3160,6 +3160,12 @@
16                         ielen = sizeof(wpaie.wpa_ie);
17                 memcpy(wpaie.wpa_ie, ni->ni_wpa_ie, ielen);
18         }
19 +       if (ni->ni_rsn_ie != NULL) {
20 +               int ielen = ni->ni_rsn_ie[1] + 2;
21 +               if (ielen > sizeof(wpaie.rsn_ie))
22 +                       ielen = sizeof(wpaie.rsn_ie);
23 +               memcpy(wpaie.rsn_ie, ni->ni_rsn_ie, ielen);
24 +       }
25         ieee80211_free_node(ni);
26         return (copy_to_user(iwr->u.data.pointer, &wpaie, sizeof(wpaie)) ?
27                         -EFAULT : 0);