l2tp: check sockaddr length in pppol2tp_connect()

Check sockaddr_len before dereferencing sp->sa_protocol, to ensure that
it actually points to valid data.

Fixes: fd558d186d ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
Reported-by: [email protected]
Signed-off-by: Guillaume Nault <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
Guillaume Nault 2018-04-23 16:15:14 +02:00 • committed by David S. Miller
commit eb1c28c058

View file

@ -619,6 +619,13 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
lock_sock(sk);
error = -EINVAL;
if (sockaddr_len != sizeof(struct sockaddr_pppol2tp) &&
sockaddr_len != sizeof(struct sockaddr_pppol2tpv3) &&
sockaddr_len != sizeof(struct sockaddr_pppol2tpin6) &&
sockaddr_len != sizeof(struct sockaddr_pppol2tpv3in6))
goto end;
if (sp->sa_protocol != PX_PROTO_OL2TP)
goto end;