diff options
| author | Guillaume Nault <g.nault@alphalink.fr> | 2018-04-23 10:15:14 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-04-23 21:10:43 -0400 |
| commit | eb1c28c05894a4b1f6b56c5bf072205e64cfa280 (patch) | |
| tree | 0de3c2e5837660745019af3c67e19249105b86c3 /net | |
| parent | b6a930fa88083b41d26ddf1cab95cbd740936c22 (diff) | |
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: fd558d186df2 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
Reported-by: syzbot+a70ac890b23b1bf29f5c@syzkaller.appspotmail.com
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
| -rw-r--r-- | net/l2tp/l2tp_ppp.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c index 1404bc1c1bb7..1fd9e145076a 100644 --- a/net/l2tp/l2tp_ppp.c +++ b/net/l2tp/l2tp_ppp.c | |||
| @@ -619,6 +619,13 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr, | |||
| 619 | lock_sock(sk); | 619 | lock_sock(sk); |
| 620 | 620 | ||
| 621 | error = -EINVAL; | 621 | error = -EINVAL; |
| 622 | |||
| 623 | if (sockaddr_len != sizeof(struct sockaddr_pppol2tp) && | ||
| 624 | sockaddr_len != sizeof(struct sockaddr_pppol2tpv3) && | ||
| 625 | sockaddr_len != sizeof(struct sockaddr_pppol2tpin6) && | ||
| 626 | sockaddr_len != sizeof(struct sockaddr_pppol2tpv3in6)) | ||
| 627 | goto end; | ||
| 628 | |||
| 622 | if (sp->sa_protocol != PX_PROTO_OL2TP) | 629 | if (sp->sa_protocol != PX_PROTO_OL2TP) |
| 623 | goto end; | 630 | goto end; |
| 624 | 631 | ||
