|
@@ -1487,9 +1487,8 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
|
|
|
skb->protocol != htons(ETH_P_IP))
|
|
|
goto e_inval;
|
|
|
|
|
|
- if (likely(!IN_DEV_ROUTE_LOCALNET(in_dev)))
|
|
|
- if (ipv4_is_loopback(saddr))
|
|
|
- goto e_inval;
|
|
|
+ if (ipv4_is_loopback(saddr) && !IN_DEV_ROUTE_LOCALNET(in_dev))
|
|
|
+ goto e_inval;
|
|
|
|
|
|
if (ipv4_is_zeronet(saddr)) {
|
|
|
if (!ipv4_is_local_multicast(daddr))
|
|
@@ -1760,7 +1759,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
|
|
|
err = fib_validate_source(skb, saddr, daddr, tos,
|
|
|
0, dev, in_dev, &itag);
|
|
|
if (err < 0)
|
|
|
- goto martian_source_keep_err;
|
|
|
+ goto martian_source;
|
|
|
goto local_input;
|
|
|
}
|
|
|
|
|
@@ -1782,7 +1781,7 @@ brd_input:
|
|
|
err = fib_validate_source(skb, saddr, 0, tos, 0, dev,
|
|
|
in_dev, &itag);
|
|
|
if (err < 0)
|
|
|
- goto martian_source_keep_err;
|
|
|
+ goto martian_source;
|
|
|
}
|
|
|
flags |= RTCF_BROADCAST;
|
|
|
res.type = RTN_BROADCAST;
|
|
@@ -1858,8 +1857,6 @@ e_nobufs:
|
|
|
goto out;
|
|
|
|
|
|
martian_source:
|
|
|
- err = -EINVAL;
|
|
|
-martian_source_keep_err:
|
|
|
ip_handle_martian_source(dev, in_dev, skb, daddr, saddr);
|
|
|
goto out;
|
|
|
}
|