forked from Minki/linux
[IPV4] fib_trie: missing ntohl() when calling fib_semantic_match()
fib_trie.c::check_leaf() passes host-endian where fib_semantic_match() expects (and stores into) net-endian. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b22b9004f2
commit
888454c57a
@ -1281,18 +1281,18 @@ static inline int check_leaf(struct trie *t, struct leaf *l,
|
||||
struct fib_result *res)
|
||||
{
|
||||
int err, i;
|
||||
t_key mask;
|
||||
__be32 mask;
|
||||
struct leaf_info *li;
|
||||
struct hlist_head *hhead = &l->list;
|
||||
struct hlist_node *node;
|
||||
|
||||
hlist_for_each_entry_rcu(li, node, hhead, hlist) {
|
||||
i = li->plen;
|
||||
mask = ntohl(inet_make_mask(i));
|
||||
if (l->key != (key & mask))
|
||||
mask = inet_make_mask(i);
|
||||
if (l->key != (key & ntohl(mask)))
|
||||
continue;
|
||||
|
||||
if ((err = fib_semantic_match(&li->falh, flp, res, l->key, mask, i)) <= 0) {
|
||||
if ((err = fib_semantic_match(&li->falh, flp, res, htonl(l->key), mask, i)) <= 0) {
|
||||
*plen = i;
|
||||
#ifdef CONFIG_IP_FIB_TRIE_STATS
|
||||
t->stats.semantic_match_passed++;
|
||||
|
Loading…
Reference in New Issue
Block a user