diff options
author | Jason Wang <jasowang@redhat.com> | 2013-03-26 19:11:22 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-27 12:48:31 -0400 |
commit | 40893fd0fd4e0eda8c6a53db6a8e6013b2d44c16 (patch) | |
tree | f61f8374d9a77385ef06012256b68633edb27e2c /drivers/net/macvtap.c | |
parent | 5203cd28db6dc05c3618a602cf4cf81203d00257 (diff) |
net: switch to use skb_probe_transport_header()
Switch to use the new help skb_probe_transport_header() to do the l4 header
probing for untrusted sources. For packets with partial csum, the header should
already been set by skb_partial_csum_set().
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/macvtap.c')
-rw-r--r-- | drivers/net/macvtap.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index acf6450ceff5..59e9605de316 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <net/rtnetlink.h> | 21 | #include <net/rtnetlink.h> |
22 | #include <net/sock.h> | 22 | #include <net/sock.h> |
23 | #include <linux/virtio_net.h> | 23 | #include <linux/virtio_net.h> |
24 | #include <net/flow_keys.h> | ||
25 | 24 | ||
26 | /* | 25 | /* |
27 | * A macvtap queue is the central object of this driver, it connects | 26 | * A macvtap queue is the central object of this driver, it connects |
@@ -646,7 +645,6 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m, | |||
646 | int vnet_hdr_len = 0; | 645 | int vnet_hdr_len = 0; |
647 | int copylen = 0; | 646 | int copylen = 0; |
648 | bool zerocopy = false; | 647 | bool zerocopy = false; |
649 | struct flow_keys keys; | ||
650 | 648 | ||
651 | if (q->flags & IFF_VNET_HDR) { | 649 | if (q->flags & IFF_VNET_HDR) { |
652 | vnet_hdr_len = q->vnet_hdr_sz; | 650 | vnet_hdr_len = q->vnet_hdr_sz; |
@@ -727,12 +725,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m, | |||
727 | goto err_kfree; | 725 | goto err_kfree; |
728 | } | 726 | } |
729 | 727 | ||
730 | if (skb->ip_summed == CHECKSUM_PARTIAL) | 728 | skb_probe_transport_header(skb, ETH_HLEN); |
731 | skb_set_transport_header(skb, skb_checksum_start_offset(skb)); | ||
732 | else if (skb_flow_dissect(skb, &keys)) | ||
733 | skb_set_transport_header(skb, keys.thoff); | ||
734 | else | ||
735 | skb_set_transport_header(skb, ETH_HLEN); | ||
736 | 729 | ||
737 | rcu_read_lock_bh(); | 730 | rcu_read_lock_bh(); |
738 | vlan = rcu_dereference_bh(q->vlan); | 731 | vlan = rcu_dereference_bh(q->vlan); |