diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
index aada12ea73ba6fdf16790b5cba21a63677a2ae06..00f9744436969214673ec9564df88e7c6045011f 100644
--- a/drivers/net/ppp/pppoe.c
+++ b/drivers/net/ppp/pppoe.c
@@ -910,16 +910,15 @@ static int pppoe_sendmsg(struct socket *sock, struct msghdr *m,
 	if (total_len > (dev->mtu + dev->hard_header_len))
 		goto end;
 
-	hlen = LL_RESERVED_SPACE(dev);
-	skb = sock_wmalloc(sk, hlen + sizeof(*ph) + total_len +
-			   dev->needed_tailroom, 0, GFP_KERNEL);
+	skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32 + NET_SKB_PAD,
+			   0, GFP_KERNEL);
 	if (!skb) {
 		error = -ENOMEM;
 		goto end;
 	}
 
 	/* Reserve space for headers. */
-	skb_reserve(skb, hlen);
+	skb_reserve(skb, dev->hard_header_len + NET_SKB_PAD);
 	skb_reset_network_header(skb);
 
 	skb->dev = dev;