diff options
author | James Morris <james.l.morris@oracle.com> | 2014-11-19 05:32:12 -0500 |
---|---|---|
committer | James Morris <james.l.morris@oracle.com> | 2014-11-19 05:32:12 -0500 |
commit | b10778a00d40b3d9fdaaf5891e802794781ff71c (patch) | |
tree | 6ba4cbac86eecedc3f30650e7f764ecf00c83898 /net/ipv4/raw.c | |
parent | 594081ee7145cc30a3977cb4e218f81213b63dc5 (diff) | |
parent | bfe01a5ba2490f299e1d2d5508cbbbadd897bbe9 (diff) |
Merge commit 'v3.17' into next
Diffstat (limited to 'net/ipv4/raw.c')
-rw-r--r-- | net/ipv4/raw.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 2c65160565e1..739db3100c23 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
@@ -58,6 +58,7 @@ | |||
58 | #include <linux/in_route.h> | 58 | #include <linux/in_route.h> |
59 | #include <linux/route.h> | 59 | #include <linux/route.h> |
60 | #include <linux/skbuff.h> | 60 | #include <linux/skbuff.h> |
61 | #include <linux/igmp.h> | ||
61 | #include <net/net_namespace.h> | 62 | #include <net/net_namespace.h> |
62 | #include <net/dst.h> | 63 | #include <net/dst.h> |
63 | #include <net/sock.h> | 64 | #include <net/sock.h> |
@@ -174,7 +175,9 @@ static int raw_v4_input(struct sk_buff *skb, const struct iphdr *iph, int hash) | |||
174 | 175 | ||
175 | while (sk) { | 176 | while (sk) { |
176 | delivered = 1; | 177 | delivered = 1; |
177 | if (iph->protocol != IPPROTO_ICMP || !icmp_filter(sk, skb)) { | 178 | if ((iph->protocol != IPPROTO_ICMP || !icmp_filter(sk, skb)) && |
179 | ip_mc_sf_allow(sk, iph->daddr, iph->saddr, | ||
180 | skb->dev->ifindex)) { | ||
178 | struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC); | 181 | struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC); |
179 | 182 | ||
180 | /* Not releasing hash table! */ | 183 | /* Not releasing hash table! */ |
@@ -365,6 +368,8 @@ static int raw_send_hdrinc(struct sock *sk, struct flowi4 *fl4, | |||
365 | 368 | ||
366 | skb->ip_summed = CHECKSUM_NONE; | 369 | skb->ip_summed = CHECKSUM_NONE; |
367 | 370 | ||
371 | sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags); | ||
372 | |||
368 | skb->transport_header = skb->network_header; | 373 | skb->transport_header = skb->network_header; |
369 | err = -EFAULT; | 374 | err = -EFAULT; |
370 | if (memcpy_fromiovecend((void *)iph, from, 0, length)) | 375 | if (memcpy_fromiovecend((void *)iph, from, 0, length)) |
@@ -606,6 +611,8 @@ back_from_confirm: | |||
606 | &rt, msg->msg_flags); | 611 | &rt, msg->msg_flags); |
607 | 612 | ||
608 | else { | 613 | else { |
614 | sock_tx_timestamp(sk, &ipc.tx_flags); | ||
615 | |||
609 | if (!ipc.addr) | 616 | if (!ipc.addr) |
610 | ipc.addr = fl4.daddr; | 617 | ipc.addr = fl4.daddr; |
611 | lock_sock(sk); | 618 | lock_sock(sk); |