X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=net%2Fwireless%2Fscan.c;h=dc23b31594e0f54758d0b59ffa5854c6e426e2e8;hb=01acc269083015e2f78407f59dc8d6378fce22ee;hp=0fb1424104047ced0d99949be89388509e05fc5c;hpb=5c24d8b2bf99ee93049a6f8154ef9cd7897a6e36;p=~andy%2Flinux diff --git a/net/wireless/scan.c b/net/wireless/scan.c index 0fb14241040..dc23b31594e 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c @@ -259,17 +259,20 @@ static int cmp_ies(u8 num, u8 *ies1, size_t len1, u8 *ies2, size_t len2) { const u8 *ie1 = cfg80211_find_ie(num, ies1, len1); const u8 *ie2 = cfg80211_find_ie(num, ies2, len2); - int r; + /* equal if both missing */ if (!ie1 && !ie2) return 0; - if (!ie1 || !ie2) + /* sort missing IE before (left of) present IE */ + if (!ie1) return -1; + if (!ie2) + return 1; - r = memcmp(ie1 + 2, ie2 + 2, min(ie1[1], ie2[1])); - if (r == 0 && ie1[1] != ie2[1]) + /* sort by length first, then by contents */ + if (ie1[1] != ie2[1]) return ie2[1] - ie1[1]; - return r; + return memcmp(ie1 + 2, ie2 + 2, ie1[1]); } static bool is_bss(struct cfg80211_bss *a,