]> err.no Git - linux-2.6/commitdiff
[PATCH] hostap_plx: fix CIS verification
authorPavel Roskin <proski@gnu.org>
Wed, 25 Oct 2006 02:41:27 +0000 (22:41 -0400)
committerJohn W. Linville <linville@laptop.(none)>
Wed, 1 Nov 2006 03:15:39 +0000 (22:15 -0500)
The length of the manfid CIS should be at least 4, and it's normally 4.
It's incorrect to require it to be at least 5.  This breaks support for
most (if not all) cards.

The right place to ensure that we don't access beyond the CIS buffer is
to strengthen another check.  Make sure that the next tuple begins at
least at the CIS buffer end (in which case we stop processing) or
before that.

Reported by ph35sm@free.fr

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/hostap/hostap_plx.c

index 6dfa041be66db9ee4725270e7184601f98aba4c5..bc81b13a5a2a95a5bce76816c5ca31f0e8373092 100644 (file)
@@ -364,7 +364,7 @@ static int prism2_plx_check_cis(void __iomem *attr_mem, int attr_len,
 
        pos = 0;
        while (pos < CIS_MAX_LEN - 1 && cis[pos] != CISTPL_END) {
-               if (pos + cis[pos + 1] >= CIS_MAX_LEN)
+               if (pos + 2 + cis[pos + 1] > CIS_MAX_LEN)
                        goto cis_error;
 
                switch (cis[pos]) {
@@ -391,7 +391,7 @@ static int prism2_plx_check_cis(void __iomem *attr_mem, int attr_len,
                        break;
 
                case CISTPL_MANFID:
-                       if (cis[pos + 1] < 5)
+                       if (cis[pos + 1] < 4)
                                goto cis_error;
                        manfid1 = cis[pos + 2] + (cis[pos + 3] << 8);
                        manfid2 = cis[pos + 4] + (cis[pos + 5] << 8);