aboutsummaryrefslogtreecommitdiffstats
path: root/net/packet
diff options
context:
space:
mode:
Diffstat (limited to 'net/packet')
-rw-r--r--net/packet/af_packet.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 745e2cb87c96..c5244b309640 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -765,16 +765,10 @@ static int packet_sendmsg(struct kiocb *iocb, struct socket *sock,
765 skb_reserve(skb, LL_RESERVED_SPACE(dev)); 765 skb_reserve(skb, LL_RESERVED_SPACE(dev));
766 skb_reset_network_header(skb); 766 skb_reset_network_header(skb);
767 767
768 if (dev->hard_header) { 768 err = -EINVAL;
769 int res; 769 if (sock->type == SOCK_DGRAM &&
770 err = -EINVAL; 770 dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len) < 0)
771 res = dev->hard_header(skb, dev, ntohs(proto), addr, NULL, len); 771 goto out_free;
772 if (sock->type != SOCK_DGRAM) {
773 skb_reset_tail_pointer(skb);
774 skb->len = 0;
775 } else if (res < 0)
776 goto out_free;
777 }
778 772
779 /* Returns -EFAULT on error */ 773 /* Returns -EFAULT on error */
780 err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len); 774 err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);