diff options
Diffstat (limited to 'net/ipv4')
| -rw-r--r-- | net/ipv4/netfilter.c | 5 | ||||
| -rw-r--r-- | net/ipv4/route.c | 8 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_policy.c | 1 |
3 files changed, 10 insertions, 4 deletions
diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c index f3c0b549b8e1..4614babdc45f 100644 --- a/net/ipv4/netfilter.c +++ b/net/ipv4/netfilter.c | |||
| @@ -221,9 +221,10 @@ static __sum16 nf_ip_checksum_partial(struct sk_buff *skb, unsigned int hook, | |||
| 221 | return csum; | 221 | return csum; |
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | static int nf_ip_route(struct dst_entry **dst, struct flowi *fl) | 224 | static int nf_ip_route(struct net *net, struct dst_entry **dst, |
| 225 | struct flowi *fl, bool strict __always_unused) | ||
| 225 | { | 226 | { |
| 226 | struct rtable *rt = ip_route_output_key(&init_net, &fl->u.ip4); | 227 | struct rtable *rt = ip_route_output_key(net, &fl->u.ip4); |
| 227 | if (IS_ERR(rt)) | 228 | if (IS_ERR(rt)) |
| 228 | return PTR_ERR(rt); | 229 | return PTR_ERR(rt); |
| 229 | *dst = &rt->dst; | 230 | *dst = &rt->dst; |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index ea107515c53e..c1acf69858fd 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
| @@ -1891,6 +1891,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr, | |||
| 1891 | #ifdef CONFIG_IP_ROUTE_CLASSID | 1891 | #ifdef CONFIG_IP_ROUTE_CLASSID |
| 1892 | rth->dst.tclassid = itag; | 1892 | rth->dst.tclassid = itag; |
| 1893 | #endif | 1893 | #endif |
| 1894 | rth->rt_route_iif = dev->ifindex; | ||
| 1894 | rth->rt_iif = dev->ifindex; | 1895 | rth->rt_iif = dev->ifindex; |
| 1895 | rth->dst.dev = init_net.loopback_dev; | 1896 | rth->dst.dev = init_net.loopback_dev; |
| 1896 | dev_hold(rth->dst.dev); | 1897 | dev_hold(rth->dst.dev); |
| @@ -2026,6 +2027,7 @@ static int __mkroute_input(struct sk_buff *skb, | |||
| 2026 | rth->rt_key_src = saddr; | 2027 | rth->rt_key_src = saddr; |
| 2027 | rth->rt_src = saddr; | 2028 | rth->rt_src = saddr; |
| 2028 | rth->rt_gateway = daddr; | 2029 | rth->rt_gateway = daddr; |
| 2030 | rth->rt_route_iif = in_dev->dev->ifindex; | ||
| 2029 | rth->rt_iif = in_dev->dev->ifindex; | 2031 | rth->rt_iif = in_dev->dev->ifindex; |
| 2030 | rth->dst.dev = (out_dev)->dev; | 2032 | rth->dst.dev = (out_dev)->dev; |
| 2031 | dev_hold(rth->dst.dev); | 2033 | dev_hold(rth->dst.dev); |
| @@ -2202,6 +2204,7 @@ local_input: | |||
| 2202 | #ifdef CONFIG_IP_ROUTE_CLASSID | 2204 | #ifdef CONFIG_IP_ROUTE_CLASSID |
| 2203 | rth->dst.tclassid = itag; | 2205 | rth->dst.tclassid = itag; |
| 2204 | #endif | 2206 | #endif |
| 2207 | rth->rt_route_iif = dev->ifindex; | ||
| 2205 | rth->rt_iif = dev->ifindex; | 2208 | rth->rt_iif = dev->ifindex; |
| 2206 | rth->dst.dev = net->loopback_dev; | 2209 | rth->dst.dev = net->loopback_dev; |
| 2207 | dev_hold(rth->dst.dev); | 2210 | dev_hold(rth->dst.dev); |
| @@ -2401,7 +2404,8 @@ static struct rtable *__mkroute_output(const struct fib_result *res, | |||
| 2401 | rth->rt_mark = oldflp4->flowi4_mark; | 2404 | rth->rt_mark = oldflp4->flowi4_mark; |
| 2402 | rth->rt_dst = fl4->daddr; | 2405 | rth->rt_dst = fl4->daddr; |
| 2403 | rth->rt_src = fl4->saddr; | 2406 | rth->rt_src = fl4->saddr; |
| 2404 | rth->rt_iif = 0; | 2407 | rth->rt_route_iif = 0; |
| 2408 | rth->rt_iif = oldflp4->flowi4_oif ? : dev_out->ifindex; | ||
| 2405 | /* get references to the devices that are to be hold by the routing | 2409 | /* get references to the devices that are to be hold by the routing |
| 2406 | cache entry */ | 2410 | cache entry */ |
| 2407 | rth->dst.dev = dev_out; | 2411 | rth->dst.dev = dev_out; |
| @@ -2716,6 +2720,7 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or | |||
| 2716 | rt->rt_key_dst = ort->rt_key_dst; | 2720 | rt->rt_key_dst = ort->rt_key_dst; |
| 2717 | rt->rt_key_src = ort->rt_key_src; | 2721 | rt->rt_key_src = ort->rt_key_src; |
| 2718 | rt->rt_tos = ort->rt_tos; | 2722 | rt->rt_tos = ort->rt_tos; |
| 2723 | rt->rt_route_iif = ort->rt_route_iif; | ||
| 2719 | rt->rt_iif = ort->rt_iif; | 2724 | rt->rt_iif = ort->rt_iif; |
| 2720 | rt->rt_oif = ort->rt_oif; | 2725 | rt->rt_oif = ort->rt_oif; |
| 2721 | rt->rt_mark = ort->rt_mark; | 2726 | rt->rt_mark = ort->rt_mark; |
| @@ -2725,7 +2730,6 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or | |||
| 2725 | rt->rt_type = ort->rt_type; | 2730 | rt->rt_type = ort->rt_type; |
| 2726 | rt->rt_dst = ort->rt_dst; | 2731 | rt->rt_dst = ort->rt_dst; |
| 2727 | rt->rt_src = ort->rt_src; | 2732 | rt->rt_src = ort->rt_src; |
| 2728 | rt->rt_iif = ort->rt_iif; | ||
| 2729 | rt->rt_gateway = ort->rt_gateway; | 2733 | rt->rt_gateway = ort->rt_gateway; |
| 2730 | rt->rt_spec_dst = ort->rt_spec_dst; | 2734 | rt->rt_spec_dst = ort->rt_spec_dst; |
| 2731 | rt->peer = ort->peer; | 2735 | rt->peer = ort->peer; |
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c index 13e0e7f659ff..d20a05e970d8 100644 --- a/net/ipv4/xfrm4_policy.c +++ b/net/ipv4/xfrm4_policy.c | |||
| @@ -74,6 +74,7 @@ static int xfrm4_fill_dst(struct xfrm_dst *xdst, struct net_device *dev, | |||
| 74 | rt->rt_key_dst = fl4->daddr; | 74 | rt->rt_key_dst = fl4->daddr; |
| 75 | rt->rt_key_src = fl4->saddr; | 75 | rt->rt_key_src = fl4->saddr; |
| 76 | rt->rt_tos = fl4->flowi4_tos; | 76 | rt->rt_tos = fl4->flowi4_tos; |
| 77 | rt->rt_route_iif = fl4->flowi4_iif; | ||
| 77 | rt->rt_iif = fl4->flowi4_iif; | 78 | rt->rt_iif = fl4->flowi4_iif; |
| 78 | rt->rt_oif = fl4->flowi4_oif; | 79 | rt->rt_oif = fl4->flowi4_oif; |
| 79 | rt->rt_mark = fl4->flowi4_mark; | 80 | rt->rt_mark = fl4->flowi4_mark; |
