diff options
Diffstat (limited to 'net/packet')
-rw-r--r-- | net/packet/af_packet.c | 14 |
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); |