|
@@ -2903,13 +2903,15 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
|
|
|
if (skb == NULL)
|
|
|
goto out_unlock;
|
|
|
|
|
|
- skb_set_network_header(skb, reserve);
|
|
|
+ skb_reset_network_header(skb);
|
|
|
|
|
|
err = -EINVAL;
|
|
|
if (sock->type == SOCK_DGRAM) {
|
|
|
offset = dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len);
|
|
|
if (unlikely(offset < 0))
|
|
|
goto out_free;
|
|
|
+ } else if (reserve) {
|
|
|
+ skb_push(skb, reserve);
|
|
|
}
|
|
|
|
|
|
/* Returns -EFAULT on error */
|