diff options
Diffstat (limited to 'net/packet/af_packet.c')
-rw-r--r-- | net/packet/af_packet.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 75c92a87e7b2..d6e94dc7e290 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -2715,10 +2715,12 @@ tpacket_error: | |||
2715 | } | 2715 | } |
2716 | } | 2716 | } |
2717 | 2717 | ||
2718 | if (po->has_vnet_hdr && virtio_net_hdr_to_skb(skb, vnet_hdr, | 2718 | if (po->has_vnet_hdr) { |
2719 | vio_le())) { | 2719 | if (virtio_net_hdr_to_skb(skb, vnet_hdr, vio_le())) { |
2720 | tp_len = -EINVAL; | 2720 | tp_len = -EINVAL; |
2721 | goto tpacket_error; | 2721 | goto tpacket_error; |
2722 | } | ||
2723 | virtio_net_hdr_set_proto(skb, vnet_hdr); | ||
2722 | } | 2724 | } |
2723 | 2725 | ||
2724 | skb->destructor = tpacket_destruct_skb; | 2726 | skb->destructor = tpacket_destruct_skb; |
@@ -2915,6 +2917,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len) | |||
2915 | if (err) | 2917 | if (err) |
2916 | goto out_free; | 2918 | goto out_free; |
2917 | len += sizeof(vnet_hdr); | 2919 | len += sizeof(vnet_hdr); |
2920 | virtio_net_hdr_set_proto(skb, &vnet_hdr); | ||
2918 | } | 2921 | } |
2919 | 2922 | ||
2920 | skb_probe_transport_header(skb, reserve); | 2923 | skb_probe_transport_header(skb, reserve); |