fib_trie: potential out of bounds access in trie_show_stats()
authorJerry Snitselaar <jerry.snitselaar@oracle.com>
Mon, 22 Jul 2013 19:01:58 +0000 (12:01 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 Jul 2013 23:05:14 +0000 (16:05 -0700)
With the <= max condition in the for loop, it will be always go 1
element further than needed. If the condition for the while loop is
never met, then max is MAX_STAT_DEPTH, and for loop will walk off the
end of nodesizes[].

Signed-off-by: Jerry Snitselaar <jerry.snitselaar@oracle.com>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/fib_trie.c

index 49616fe..108a1e9 100644 (file)
@@ -2133,7 +2133,7 @@ static void trie_show_stats(struct seq_file *seq, struct trie_stat *stat)
                max--;
 
        pointers = 0;
-       for (i = 1; i <= max; i++)
+       for (i = 1; i < max; i++)
                if (stat->nodesizes[i] != 0) {
                        seq_printf(seq, "  %u: %u",  i, stat->nodesizes[i]);
                        pointers += (1<<i) * stat->nodesizes[i];