Message ID | 20150310182512.1320.1169.stgit@ahduyck-vm-fedora20 |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
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.
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 --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;
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