forked from Minki/linux
[NETNS]: Pass correct namespace in ip_route_input_slow.
The packet on the input path always has a referrence to an input network device it is passed from. Extract network namespace from it. Signed-off-by: Denis V. Lunev <den@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
86167a377f
commit
84a885f449
@ -1881,6 +1881,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
|
||||
__be32 spec_dst;
|
||||
int err = -EINVAL;
|
||||
int free_res = 0;
|
||||
struct net * net = dev->nd_net;
|
||||
|
||||
/* IP on this device is disabled. */
|
||||
|
||||
@ -1911,7 +1912,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
|
||||
/*
|
||||
* Now we are ready to route packet.
|
||||
*/
|
||||
if ((err = fib_lookup(&init_net, &fl, &res)) != 0) {
|
||||
if ((err = fib_lookup(net, &fl, &res)) != 0) {
|
||||
if (!IN_DEV_FORWARD(in_dev))
|
||||
goto e_hostunreach;
|
||||
goto no_route;
|
||||
@ -1926,7 +1927,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
|
||||
if (res.type == RTN_LOCAL) {
|
||||
int result;
|
||||
result = fib_validate_source(saddr, daddr, tos,
|
||||
init_net.loopback_dev->ifindex,
|
||||
net->loopback_dev->ifindex,
|
||||
dev, &spec_dst, &itag);
|
||||
if (result < 0)
|
||||
goto martian_source;
|
||||
@ -1988,7 +1989,7 @@ local_input:
|
||||
#endif
|
||||
rth->rt_iif =
|
||||
rth->fl.iif = dev->ifindex;
|
||||
rth->u.dst.dev = init_net.loopback_dev;
|
||||
rth->u.dst.dev = net->loopback_dev;
|
||||
dev_hold(rth->u.dst.dev);
|
||||
rth->idev = in_dev_get(rth->u.dst.dev);
|
||||
rth->rt_gateway = daddr;
|
||||
|
Loading…
Reference in New Issue
Block a user