l2tp: Fix PPP header erasure and memory leak
authorGuillaume Nault <g.nault@alphalink.fr>
Wed, 12 Jun 2013 14:07:23 +0000 (16:07 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 13 Jun 2013 09:39:04 +0000 (02:39 -0700)
Copy user data after PPP framing header. This prevents erasure of the
added PPP header and avoids leaking two bytes of uninitialised memory
at the end of skb's data buffer.

Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/l2tp/l2tp_ppp.c

index 637a341c1e2d1a466c68efcb50d7fc201198a15b..681c626068b4fa45fef034f44134d2891edc4157 100644 (file)
@@ -346,12 +346,12 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh
        skb_put(skb, 2);
 
        /* Copy user data into skb */
-       error = memcpy_fromiovec(skb->data, m->msg_iov, total_len);
+       error = memcpy_fromiovec(skb_put(skb, total_len), m->msg_iov,
+                                total_len);
        if (error < 0) {
                kfree_skb(skb);
                goto error_put_sess_tun;
        }
-       skb_put(skb, total_len);
 
        l2tp_xmit_skb(session, skb, session->hdr_len);