summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBasil Gor <basil.gor@gmail.com>2012-05-04 02:55:23 +0400
committerDavid S. Miller <davem@davemloft.net>2012-05-12 02:16:57 +0400
commitc53cff5e42a06b81495983bd01741b9a954f11f0 (patch)
treeede51285061a64bf44cfacfd93580d9707fd32b9
parent13a8e0c8cdb43982372bd6c65fb26839c8fd8ce9 (diff)
downloadlinux-c53cff5e42a06b81495983bd01741b9a954f11f0.tar.xz
vhost-net: fix handle_rx buffer size
Take vlan header length into account, when vlan id is stored as vlan_tci. Otherwise tagged packets coming from macvtap will be truncated. Signed-off-by: Basil Gor <basil.gor@gmail.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/vhost/net.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 1f21d2a1e528..5c170100de9c 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -24,6 +24,7 @@
#include <linux/if_arp.h>
#include <linux/if_tun.h>
#include <linux/if_macvlan.h>
+#include <linux/if_vlan.h>
#include <net/sock.h>
@@ -283,8 +284,12 @@ static int peek_head_len(struct sock *sk)
spin_lock_irqsave(&sk->sk_receive_queue.lock, flags);
head = skb_peek(&sk->sk_receive_queue);
- if (likely(head))
+ if (likely(head)) {
len = head->len;
+ if (vlan_tx_tag_present(head))
+ len += VLAN_HLEN;
+ }
+
spin_unlock_irqrestore(&sk->sk_receive_queue.lock, flags);
return len;
}