aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv6/ip6_input.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
index 7e5df23cbe7b..3d71c7d6102c 100644
--- a/net/ipv6/ip6_input.c
+++ b/net/ipv6/ip6_input.c
@@ -223,6 +223,16 @@ static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev,
223 if (ipv6_addr_is_multicast(&hdr->saddr)) 223 if (ipv6_addr_is_multicast(&hdr->saddr))
224 goto err; 224 goto err;
225 225
226 /* While RFC4291 is not explicit about v4mapped addresses
227 * in IPv6 headers, it seems clear linux dual-stack
228 * model can not deal properly with these.
229 * Security models could be fooled by ::ffff:127.0.0.1 for example.
230 *
231 * https://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful-02
232 */
233 if (ipv6_addr_v4mapped(&hdr->saddr))
234 goto err;
235
226 skb->transport_header = skb->network_header + sizeof(*hdr); 236 skb->transport_header = skb->network_header + sizeof(*hdr);
227 IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr); 237 IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);
228 238