Commit 888454c5 authored by Al Viro's avatar Al Viro Committed by David S. Miller

[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: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b22b9004
...@@ -1281,18 +1281,18 @@ static inline int check_leaf(struct trie *t, struct leaf *l, ...@@ -1281,18 +1281,18 @@ static inline int check_leaf(struct trie *t, struct leaf *l,
struct fib_result *res) struct fib_result *res)
{ {
int err, i; int err, i;
t_key mask; __be32 mask;
struct leaf_info *li; struct leaf_info *li;
struct hlist_head *hhead = &l->list; struct hlist_head *hhead = &l->list;
struct hlist_node *node; struct hlist_node *node;
hlist_for_each_entry_rcu(li, node, hhead, hlist) { hlist_for_each_entry_rcu(li, node, hhead, hlist) {
i = li->plen; i = li->plen;
mask = ntohl(inet_make_mask(i)); mask = inet_make_mask(i);
if (l->key != (key & mask)) if (l->key != (key & ntohl(mask)))
continue; 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; *plen = i;
#ifdef CONFIG_IP_FIB_TRIE_STATS #ifdef CONFIG_IP_FIB_TRIE_STATS
t->stats.semantic_match_passed++; t->stats.semantic_match_passed++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment