l2tp: do not use udp_ioctl()
authorEric Dumazet <edumazet@google.com>
Fri, 10 Feb 2017 00:15:52 +0000 (16:15 -0800)
committerWilly Tarreau <w@1wt.eu>
Wed, 7 Jun 2017 22:46:58 +0000 (00:46 +0200)
commit3d753377d2f56c59cae37f9e46db4b8fee643f73
treea61c4cf00bdb42519199e8dff0c26f3a08339c1f
parentc6dfb877c41855552173987d6869a2f2da287527
l2tp: do not use udp_ioctl()

commit 72fb96e7bdbbdd4421b0726992496531060f3636 upstream.

udp_ioctl(), as its name suggests, is used by UDP protocols,
but is also used by L2TP :(

L2TP should use its own handler, because it really does not
look the same.

SIOCINQ for instance should not assume UDP checksum or headers.

Thanks to Andrey and syzkaller team for providing the report
and a nice reproducer.

While crashes only happen on recent kernels (after commit
7c13f97ffde6 ("udp: do fwd memory scheduling on dequeue")), this
probably needs to be backported to older kernels.

Fixes: 7c13f97ffde6 ("udp: do fwd memory scheduling on dequeue")
Fixes: 85584672012e ("udp: Fix udp_poll() and ioctl()")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Willy Tarreau <w@1wt.eu>
net/l2tp/l2tp_core.h
net/l2tp/l2tp_ip.c
net/l2tp/l2tp_ip6.c