source: branches/backfire/package/hostapd/patches/570-wpa_ie_cap_workaround.patch @ 29298

Last change on this file since 29298 was 29298, checked in by nbd, 5 years ago

hostapd: update to latest version from trunk (fixes #10455)

File size: 1.4 KB
  • src/common/wpa_common.c

    a b const char * wpa_key_mgmt_txt(int key_mg 
    959959} 
    960960 
    961961 
     962static void wpa_fixup_wpa_ie_rsn(u8 *assoc_ie, const u8 *wpa_msg_ie, 
     963                                 size_t rsn_ie_len) 
     964{ 
     965        int pos, count; 
     966 
     967        pos = sizeof(struct rsn_ie_hdr) + RSN_SELECTOR_LEN; 
     968        if (rsn_ie_len < pos + 2) 
     969                return; 
     970 
     971        count = WPA_GET_LE16(wpa_msg_ie + pos); 
     972        pos += 2 + count * RSN_SELECTOR_LEN; 
     973        if (rsn_ie_len < pos + 2) 
     974                return; 
     975 
     976        count = WPA_GET_LE16(wpa_msg_ie + pos); 
     977        pos += 2 + count * RSN_SELECTOR_LEN; 
     978        if (rsn_ie_len < pos + 2) 
     979                return; 
     980 
     981        if (!assoc_ie[pos] && !assoc_ie[pos + 1] && 
     982            (wpa_msg_ie[pos] || wpa_msg_ie[pos + 1])) 
     983                memcpy(&assoc_ie[pos], &wpa_msg_ie[pos], 2); 
     984} 
     985 
     986 
    962987int wpa_compare_rsn_ie(int ft_initial_assoc, 
    963988                       const u8 *ie1, size_t ie1len, 
    964989                       const u8 *ie2, size_t ie2len) 
    int wpa_compare_rsn_ie(int ft_initial_as 
    966991        if (ie1 == NULL || ie2 == NULL) 
    967992                return -1; 
    968993 
    969         if (ie1len == ie2len && os_memcmp(ie1, ie2, ie1len) == 0) 
    970                 return 0; /* identical IEs */ 
     994        if (ie1len == ie2len) { 
     995                u8 *ie_tmp; 
     996 
     997                if (os_memcmp(ie1, ie2, ie1len) == 0) 
     998                        return 0; /* identical IEs */ 
     999 
     1000                ie_tmp = alloca(ie1len); 
     1001                memcpy(ie_tmp, ie1, ie1len); 
     1002                wpa_fixup_wpa_ie_rsn(ie_tmp, ie2, ie1len); 
     1003 
     1004                if (os_memcmp(ie_tmp, ie2, ie1len) == 0) 
     1005                        return 0; /* only mismatch in RSN capabilties */ 
     1006        } 
    9711007 
    9721008#ifdef CONFIG_IEEE80211R 
    9731009        if (ft_initial_assoc) { 
Note: See TracBrowser for help on using the repository browser.