| From 3cf521f7dc87c031617fd47e4b7aa2593c2f3daf Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sasha.levin@oracle.com> |
| Date: Mon, 14 Jul 2014 17:02:31 -0700 |
| Subject: net/l2tp: don't fall back on UDP [get|set]sockopt |
| |
| From: Sasha Levin <sasha.levin@oracle.com> |
| |
| commit 3cf521f7dc87c031617fd47e4b7aa2593c2f3daf upstream. |
| |
| The l2tp [get|set]sockopt() code has fallen back to the UDP functions |
| for socket option levels != SOL_PPPOL2TP since day one, but that has |
| never actually worked, since the l2tp socket isn't an inet socket. |
| |
| As David Miller points out: |
| |
| "If we wanted this to work, it'd have to look up the tunnel and then |
| use tunnel->sk, but I wonder how useful that would be" |
| |
| Since this can never have worked so nobody could possibly have depended |
| on that functionality, just remove the broken code and return -EINVAL. |
| |
| Reported-by: Sasha Levin <sasha.levin@oracle.com> |
| Acked-by: James Chapman <jchapman@katalix.com> |
| Acked-by: David Miller <davem@davemloft.net> |
| Cc: Phil Turnbull <phil.turnbull@oracle.com> |
| Cc: Vegard Nossum <vegard.nossum@oracle.com> |
| Cc: Willy Tarreau <w@1wt.eu> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/l2tp/l2tp_ppp.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/net/l2tp/l2tp_ppp.c |
| +++ b/net/l2tp/l2tp_ppp.c |
| @@ -1368,7 +1368,7 @@ static int pppol2tp_setsockopt(struct so |
| int err; |
| |
| if (level != SOL_PPPOL2TP) |
| - return udp_prot.setsockopt(sk, level, optname, optval, optlen); |
| + return -EINVAL; |
| |
| if (optlen < sizeof(int)) |
| return -EINVAL; |
| @@ -1494,7 +1494,7 @@ static int pppol2tp_getsockopt(struct so |
| struct pppol2tp_session *ps; |
| |
| if (level != SOL_PPPOL2TP) |
| - return udp_prot.getsockopt(sk, level, optname, optval, optlen); |
| + return -EINVAL; |
| |
| if (get_user(len, optlen)) |
| return -EFAULT; |