Fix pppol2tp getsockname()
authorBenjamin LaHaise <bcrl@kvack.org>
Tue, 20 Mar 2012 03:57:54 +0000 (03:57 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 20 Mar 2012 20:12:11 +0000 (16:12 -0400)
While testing L2TP functionality, I came across a bug in getsockname().  The
IP address returned within the pppol2tp_addr's addr memember was not being
set to the IP  address in use.  This bug is caused by using inet_sk() on the
wrong socket (the L2TP socket rather than the underlying UDP socket), and was
likely introduced during the addition of L2TPv3 support.

Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
Signed-off-by: James Chapman <jchapman@katalix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/l2tp/l2tp_ppp.c

index 96bc7a67585a426d07a1bfce9c77c869ea496433..9b071910b4ba6a31ea4edc5b5dd53c84375c7f23 100644 (file)
@@ -915,7 +915,7 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
                goto end_put_sess;
        }
 
-       inet = inet_sk(sk);
+       inet = inet_sk(tunnel->sock);
        if (tunnel->version == 2) {
                struct sockaddr_pppol2tp sp;
                len = sizeof(sp);