diff options
Diffstat (limited to 'net/ipv4/fib_frontend.c')
| -rw-r--r-- | net/ipv4/fib_frontend.c | 8 | 
1 files changed, 4 insertions, 4 deletions
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index b3f627ac4ed..255aa9946fe 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c @@ -250,7 +250,7 @@ static int __fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,  	bool dev_match;  	fl4.flowi4_oif = 0; -	fl4.flowi4_iif = oif; +	fl4.flowi4_iif = oif ? : LOOPBACK_IFINDEX;  	fl4.daddr = src;  	fl4.saddr = dst;  	fl4.flowi4_tos = tos; @@ -659,7 +659,7 @@ static int inet_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)  	if (nlmsg_len(cb->nlh) >= sizeof(struct rtmsg) &&  	    ((struct rtmsg *) nlmsg_data(cb->nlh))->rtm_flags & RTM_F_CLONED) -		return ip_rt_dump(skb, cb); +		return skb->len;  	s_h = cb->args[0];  	s_e = cb->args[1]; @@ -933,7 +933,6 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb)  		local_bh_disable();  		frn->tb_id = tb->tb_id; -		rcu_read_lock();  		frn->err = fib_table_lookup(tb, &fl4, &res, FIB_LOOKUP_NOREF);  		if (!frn->err) { @@ -942,7 +941,6 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb)  			frn->type = res.type;  			frn->scope = res.scope;  		} -		rcu_read_unlock();  		local_bh_enable();  	}  } @@ -1049,6 +1047,8 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo  	}  	in_dev = __in_dev_get_rtnl(dev); +	if (!in_dev) +		return NOTIFY_DONE;  	switch (event) {  	case NETDEV_UP:  | 
