diff mbox

[net-next] fib_trie: Correctly handle case of key == 0 in leaf_walk_rcu

Message ID 20150310182512.1320.1169.stgit@ahduyck-vm-fedora20
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Alexander Duyck March 10, 2015, 6:25 p.m. UTC
In the case of a trie that had no tnodes with a key of 0 the initial
look-up would fail resulting in an out-of-bounds cindex on the first tnode.
This resulted in an entire trie being skipped.

In order resolve this I have updated the cindex logic in the initial
look-up so that if the key is zero we will always traverse the child zero
path.

Fixes: 8be33e95 ("fib_trie: Fib walk rcu should take a tnode and key instead of a trie and a leaf")
Reported-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
---
 net/ipv4/fib_trie.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Sabrina Dubroca March 10, 2015, 6:48 p.m. UTC | #1
2015-03-10, 11:25:41 -0700, Alexander Duyck wrote:
> In the case of a trie that had no tnodes with a key of 0 the initial
> look-up would fail resulting in an out-of-bounds cindex on the first tnode.
> This resulted in an entire trie being skipped.
> 
> In order resolve this I have updated the cindex logic in the initial
> look-up so that if the key is zero we will always traverse the child zero
> path.
> 
> Fixes: 8be33e95 ("fib_trie: Fib walk rcu should take a tnode and key instead of a trie and a leaf")
> Reported-by: Sabrina Dubroca <sd@queasysnail.net>
> Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
> ---

Tested-by: Sabrina Dubroca <sd@queasysnail.net>

Thanks Alex.
David Miller March 10, 2015, 8:14 p.m. UTC | #2
From: Sabrina Dubroca <sd@queasysnail.net>
Date: Tue, 10 Mar 2015 19:48:39 +0100

> 2015-03-10, 11:25:41 -0700, Alexander Duyck wrote:
>> In the case of a trie that had no tnodes with a key of 0 the initial
>> look-up would fail resulting in an out-of-bounds cindex on the first tnode.
>> This resulted in an entire trie being skipped.
>> 
>> In order resolve this I have updated the cindex logic in the initial
>> look-up so that if the key is zero we will always traverse the child zero
>> path.
>> 
>> Fixes: 8be33e95 ("fib_trie: Fib walk rcu should take a tnode and key instead of a trie and a leaf")
>> Reported-by: Sabrina Dubroca <sd@queasysnail.net>
>> Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
>> ---
> 
> Tested-by: Sabrina Dubroca <sd@queasysnail.net>

Applied, thanks everyone.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index fcfa982..44cab1d 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -1530,7 +1530,7 @@  static struct key_vector *leaf_walk_rcu(struct key_vector **tn, t_key key)
 	do {
 		/* record parent and next child index */
 		pn = n;
-		cindex = get_index(key, pn);
+		cindex = key ? get_index(key, pn) : 0;
 
 		if (cindex >> pn->bits)
 			break;