diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2017-02-26 15:34:42 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2017-02-26 15:34:42 -0500 |
commit | 8e22e1b3499a446df48c2b26667ca36c55bf864c (patch) | |
tree | 5329f98b3eb3c95a9dcbab0fa4f9b6e62f0e788d /net/packet/af_packet.c | |
parent | 00d3c14f14d51babd8aeafd5fa734ccf04f5ca3d (diff) | |
parent | 64a577196d66b44e37384bc5c4d78c61f59d5b2a (diff) |
Merge airlied/drm-next into drm-misc-next
Backmerge the main pull request to sync up with all the newly landed
drivers. Otherwise we'll have chaos even before 4.12 started in
earnest.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'net/packet/af_packet.c')
-rw-r--r-- | net/packet/af_packet.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index b9e1a13b4ba3..d56ee46b11fc 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -1976,7 +1976,7 @@ static int packet_rcv_vnet(struct msghdr *msg, const struct sk_buff *skb, | |||
1976 | return -EINVAL; | 1976 | return -EINVAL; |
1977 | *len -= sizeof(vnet_hdr); | 1977 | *len -= sizeof(vnet_hdr); |
1978 | 1978 | ||
1979 | if (virtio_net_hdr_from_skb(skb, &vnet_hdr, vio_le())) | 1979 | if (virtio_net_hdr_from_skb(skb, &vnet_hdr, vio_le(), true)) |
1980 | return -EINVAL; | 1980 | return -EINVAL; |
1981 | 1981 | ||
1982 | return memcpy_to_msg(msg, (void *)&vnet_hdr, sizeof(vnet_hdr)); | 1982 | return memcpy_to_msg(msg, (void *)&vnet_hdr, sizeof(vnet_hdr)); |
@@ -2237,7 +2237,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, | |||
2237 | if (po->has_vnet_hdr) { | 2237 | if (po->has_vnet_hdr) { |
2238 | if (virtio_net_hdr_from_skb(skb, h.raw + macoff - | 2238 | if (virtio_net_hdr_from_skb(skb, h.raw + macoff - |
2239 | sizeof(struct virtio_net_hdr), | 2239 | sizeof(struct virtio_net_hdr), |
2240 | vio_le())) { | 2240 | vio_le(), true)) { |
2241 | spin_lock(&sk->sk_receive_queue.lock); | 2241 | spin_lock(&sk->sk_receive_queue.lock); |
2242 | goto drop_n_account; | 2242 | goto drop_n_account; |
2243 | } | 2243 | } |
@@ -2755,7 +2755,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len) | |||
2755 | struct virtio_net_hdr vnet_hdr = { 0 }; | 2755 | struct virtio_net_hdr vnet_hdr = { 0 }; |
2756 | int offset = 0; | 2756 | int offset = 0; |
2757 | struct packet_sock *po = pkt_sk(sk); | 2757 | struct packet_sock *po = pkt_sk(sk); |
2758 | int hlen, tlen; | 2758 | int hlen, tlen, linear; |
2759 | int extra_len = 0; | 2759 | int extra_len = 0; |
2760 | 2760 | ||
2761 | /* | 2761 | /* |
@@ -2816,8 +2816,9 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len) | |||
2816 | err = -ENOBUFS; | 2816 | err = -ENOBUFS; |
2817 | hlen = LL_RESERVED_SPACE(dev); | 2817 | hlen = LL_RESERVED_SPACE(dev); |
2818 | tlen = dev->needed_tailroom; | 2818 | tlen = dev->needed_tailroom; |
2819 | skb = packet_alloc_skb(sk, hlen + tlen, hlen, len, | 2819 | linear = __virtio16_to_cpu(vio_le(), vnet_hdr.hdr_len); |
2820 | __virtio16_to_cpu(vio_le(), vnet_hdr.hdr_len), | 2820 | linear = max(linear, min_t(int, len, dev->hard_header_len)); |
2821 | skb = packet_alloc_skb(sk, hlen + tlen, hlen, len, linear, | ||
2821 | msg->msg_flags & MSG_DONTWAIT, &err); | 2822 | msg->msg_flags & MSG_DONTWAIT, &err); |
2822 | if (skb == NULL) | 2823 | if (skb == NULL) |
2823 | goto out_unlock; | 2824 | goto out_unlock; |