Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f50f95ca authored by Vlad Yasevich's avatar Vlad Yasevich Committed by David S. Miller
Browse files

SCTP: Check to make sure file is valid before setting timeout



In-kernel sockets created with sock_create_kern don't usually
have a file and file descriptor allocated to them.  As a result,
when SCTP tries to check the non-blocking flag, we Oops when
dereferencing a NULL file pointer.

Signed-off-by: default avatarVlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3663c306
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -980,6 +980,7 @@ static int __sctp_connect(struct sock* sk,
	union sctp_addr *sa_addr;
	void *addr_buf;
	unsigned short port;
	unsigned int f_flags = 0;

	sp = sctp_sk(sk);
	ep = sp->ep;
@@ -1106,7 +1107,14 @@ static int __sctp_connect(struct sock* sk,
	af->to_sk_daddr(&to, sk);
	sk->sk_err = 0;

	timeo = sock_sndtimeo(sk, sk->sk_socket->file->f_flags & O_NONBLOCK);
	/* in-kernel sockets don't generally have a file allocated to them
	 * if all they do is call sock_create_kern().
	 */
	if (sk->sk_socket->file)
		f_flags = sk->sk_socket->file->f_flags;

	timeo = sock_sndtimeo(sk, f_flags & O_NONBLOCK);

	err = sctp_wait_for_connect(asoc, &timeo);

	/* Don't free association on exit. */