mwifiex: avoid out of bounds access in mwifiex_get_common_rates.
authorCyril Roelandt <tipecaml@gmail.com>
Sun, 27 Jan 2013 22:42:48 +0000 (23:42 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 30 Jan 2013 20:07:09 +0000 (15:07 -0500)
Check that the array indexes are in-bounds before accessing the rate2 and tmp
arrays.

Found with the following semantic patch:

<smpl>
@@
identifier t;
identifier idx;
expression E;
statement S;
@@
* for (... ; <+... t[idx] ...+> && idx < E ; ...)
S
</smpl>

Signed-off-by: Cyril Roelandt <tipecaml@gmail.com>
Acked-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/join.c

index 893d809ba83c555f25062bf9b5953814021f1aa9..f0a634d237c12ecc9b2efbdd0e65f5215af8f223 100644 (file)
@@ -157,8 +157,8 @@ static int mwifiex_get_common_rates(struct mwifiex_private *priv, u8 *rate1,
 
        memset(rate1, 0, rate1_size);
 
-       for (i = 0; rate2[i] && i < rate2_size; i++) {
-               for (j = 0; tmp[j] && j < rate1_size; j++) {
+       for (i = 0; i < rate2_size && rate2[i]; i++) {
+               for (j = 0; j < rate1_size && tmp[j]; j++) {
                        /* Check common rate, excluding the bit for
                           basic rate */
                        if ((rate2[i] & 0x7F) == (tmp[j] & 0x7F)) {