diff --git a/debian/changelog b/debian/changelog index 66ffcf271..4726bf2b6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,7 @@ linux (3.14.12-2) UNRELEASED; urgency=medium [ Ben Hutchings ] * writeback: Fix ABI change in 3.14.10 (Closes: #754902) + * net/l2tp: don't fall back on UDP [get|set]sockopt (CVE-2014-4943) -- Ian Campbell Sat, 12 Jul 2014 21:12:17 +0100 diff --git a/debian/patches/bugfix/all/net-l2tp-don-t-fall-back-on-UDP-get-set-sockopt.patch b/debian/patches/bugfix/all/net-l2tp-don-t-fall-back-on-UDP-get-set-sockopt.patch new file mode 100644 index 000000000..e809c837c --- /dev/null +++ b/debian/patches/bugfix/all/net-l2tp-don-t-fall-back-on-UDP-get-set-sockopt.patch @@ -0,0 +1,49 @@ +From: Sasha Levin +Date: Mon, 14 Jul 2014 17:02:31 -0700 +Subject: net/l2tp: don't fall back on UDP [get|set]sockopt +Origin: https://git.kernel.org/linus/3cf521f7dc87c031617fd47e4b7aa2593c2f3daf + +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 +Acked-by: James Chapman +Acked-by: David Miller +Cc: Phil Turnbull +Cc: Vegard Nossum +Cc: Willy Tarreau +Cc: stable@vger.kernel.org +Signed-off-by: Linus Torvalds +--- + 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; diff --git a/debian/patches/series b/debian/patches/series index 227460719..4c5e7d85c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -97,3 +97,4 @@ debian/ptrace-avoid-abi-change-in-3.14.10.patch debian/trace-syscall-avoid-abi-change-in-3.14.11.patch debian/blkcg-avoid-abi-change-in-3.14.12.patch debian/writeback-fix-abi-change-in-3.14.10.patch +bugfix/all/net-l2tp-don-t-fall-back-on-UDP-get-set-sockopt.patch