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: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3663c30660
commit
f50f95cab7
1 changed files with 9 additions and 1 deletions
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue