|
@@ -2840,6 +2840,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
|
|
|
struct virtio_net_hdr vnet_hdr = { 0 };
|
|
|
int offset = 0;
|
|
|
struct packet_sock *po = pkt_sk(sk);
|
|
|
+ bool has_vnet_hdr = false;
|
|
|
int hlen, tlen, linear;
|
|
|
int extra_len = 0;
|
|
|
|
|
@@ -2883,6 +2884,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
|
|
|
err = packet_snd_vnet_parse(msg, &len, &vnet_hdr);
|
|
|
if (err)
|
|
|
goto out_unlock;
|
|
|
+ has_vnet_hdr = true;
|
|
|
}
|
|
|
|
|
|
if (unlikely(sock_flag(sk, SOCK_NOFCS))) {
|
|
@@ -2941,7 +2943,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
|
|
|
skb->priority = sk->sk_priority;
|
|
|
skb->mark = sockc.mark;
|
|
|
|
|
|
- if (po->has_vnet_hdr) {
|
|
|
+ if (has_vnet_hdr) {
|
|
|
err = virtio_net_hdr_to_skb(skb, &vnet_hdr, vio_le());
|
|
|
if (err)
|
|
|
goto out_free;
|