From 5f82a10ea30cc17bd16ac17e9b18725cc5ab5135 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Fri, 7 Oct 2011 05:45:57 +0000 Subject: [PATCH] --- yaml --- r: 266839 b: refs/heads/master c: 09df57ca604512b29b6096afb381c839ccbd2912 h: refs/heads/master i: 266837: d4e76b58ef6fad4fe81c2c92146a8ff02c2459d9 266835: 41dbfab7724c3aa40c465ae8d258d306f1a56f83 266831: 40f522b35bb4ef08f60078535c9a8b5e356bc0b1 v: v3 --- [refs] | 2 +- trunk/net/l2tp/l2tp_ppp.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 07ddaff1f9ab..63e1fbe76015 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bc416d9768aa9a2e46eb11354a9c58399dafeb01 +refs/heads/master: 09df57ca604512b29b6096afb381c839ccbd2912 diff --git a/trunk/net/l2tp/l2tp_ppp.c b/trunk/net/l2tp/l2tp_ppp.c index f42cd0915966..8a90d756c904 100644 --- a/trunk/net/l2tp/l2tp_ppp.c +++ b/trunk/net/l2tp/l2tp_ppp.c @@ -395,6 +395,7 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb) struct pppol2tp_session *ps; int old_headroom; int new_headroom; + int uhlen, headroom; if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED)) goto abort; @@ -413,7 +414,13 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb) goto abort_put_sess; old_headroom = skb_headroom(skb); - if (skb_cow_head(skb, sizeof(ppph))) + uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0; + headroom = NET_SKB_PAD + + sizeof(struct iphdr) + /* IP header */ + uhlen + /* UDP header (if L2TP_ENCAPTYPE_UDP) */ + session->hdr_len + /* L2TP header */ + sizeof(ppph); /* PPP header */ + if (skb_cow_head(skb, headroom)) goto abort_put_sess_tun; new_headroom = skb_headroom(skb);