aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/macvtap.c
diff options
context:
space:
mode:
authorJason Wang <jasowang@redhat.com>2013-03-26 19:11:22 -0400
committerDavid S. Miller <davem@davemloft.net>2013-03-27 12:48:31 -0400
commit40893fd0fd4e0eda8c6a53db6a8e6013b2d44c16 (patch)
treef61f8374d9a77385ef06012256b68633edb27e2c /drivers/net/macvtap.c
parent5203cd28db6dc05c3618a602cf4cf81203d00257 (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.c9
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);