diff options
author | Xin Long <lucien.xin@gmail.com> | 2017-02-07 20:56:08 +0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-07 14:07:23 -0500 |
commit | 912964eacb111551db73429719eb5fadcab0ff8a (patch) | |
tree | 9ed1ca48c2fa569d1a974fb2b0bbfb9871d8b343 /net | |
parent | 2dcab598484185dea7ec22219c76dcdd59e3cb90 (diff) | |
download | lwn-912964eacb111551db73429719eb5fadcab0ff8a.tar.gz lwn-912964eacb111551db73429719eb5fadcab0ff8a.zip |
sctp: check af before verify address in sctp_addr_id2transport
Commit 6f29a1306131 ("sctp: sctp_addr_id2transport should verify the
addr before looking up assoc") invoked sctp_verify_addr to verify the
addr.
But it didn't check af variable beforehand, once users pass an address
with family = 0 through sockopt, sctp_get_af_specific will return NULL
and NULL pointer dereference will be caused by af->sockaddr_len.
This patch is to fix it by returning NULL if af variable is NULL.
Fixes: 6f29a1306131 ("sctp: sctp_addr_id2transport should verify the addr before looking up assoc")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/sctp/socket.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index e214d2e7e9a3..1b5d669e3029 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -239,7 +239,7 @@ static struct sctp_transport *sctp_addr_id2transport(struct sock *sk, union sctp_addr *laddr = (union sctp_addr *)addr; struct sctp_transport *transport; - if (sctp_verify_addr(sk, laddr, af->sockaddr_len)) + if (!af || sctp_verify_addr(sk, laddr, af->sockaddr_len)) return NULL; addr_asoc = sctp_endpoint_lookup_assoc(sctp_sk(sk)->ep, |