Browse Source

pptp: verify sockaddr_len in pptp_bind() and pptp_connect()

Reported-by: Dmitry Vyukov <dvyukov@gmail.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
WANG Cong 9 years ago
parent
commit
09ccfd238e
1 changed files with 6 additions and 0 deletions
  1. 6 0
      drivers/net/ppp/pptp.c

+ 6 - 0
drivers/net/ppp/pptp.c

@@ -419,6 +419,9 @@ static int pptp_bind(struct socket *sock, struct sockaddr *uservaddr,
 	struct pptp_opt *opt = &po->proto.pptp;
 	struct pptp_opt *opt = &po->proto.pptp;
 	int error = 0;
 	int error = 0;
 
 
+	if (sockaddr_len < sizeof(struct sockaddr_pppox))
+		return -EINVAL;
+
 	lock_sock(sk);
 	lock_sock(sk);
 
 
 	opt->src_addr = sp->sa_addr.pptp;
 	opt->src_addr = sp->sa_addr.pptp;
@@ -440,6 +443,9 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
 	struct flowi4 fl4;
 	struct flowi4 fl4;
 	int error = 0;
 	int error = 0;
 
 
+	if (sockaddr_len < sizeof(struct sockaddr_pppox))
+		return -EINVAL;
+
 	if (sp->sa_protocol != PX_PROTO_PPTP)
 	if (sp->sa_protocol != PX_PROTO_PPTP)
 		return -EINVAL;
 		return -EINVAL;