Commit f50f95cab735ebe2993e8d1549f0615bad05f3f2

Authored by Vlad Yasevich
Committed by David S. Miller
1 parent 3663c30660

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>

Showing 1 changed file with 9 additions and 1 deletions Side-by-side Diff

... ... @@ -980,6 +980,7 @@
980 980 union sctp_addr *sa_addr;
981 981 void *addr_buf;
982 982 unsigned short port;
  983 + unsigned int f_flags = 0;
983 984  
984 985 sp = sctp_sk(sk);
985 986 ep = sp->ep;
... ... @@ -1106,7 +1107,14 @@
1106 1107 af->to_sk_daddr(&to, sk);
1107 1108 sk->sk_err = 0;
1108 1109  
1109   - timeo = sock_sndtimeo(sk, sk->sk_socket->file->f_flags & O_NONBLOCK);
  1110 + /* in-kernel sockets don't generally have a file allocated to them
  1111 + * if all they do is call sock_create_kern().
  1112 + */
  1113 + if (sk->sk_socket->file)
  1114 + f_flags = sk->sk_socket->file->f_flags;
  1115 +
  1116 + timeo = sock_sndtimeo(sk, f_flags & O_NONBLOCK);
  1117 +
1110 1118 err = sctp_wait_for_connect(asoc, &timeo);
1111 1119  
1112 1120 /* Don't free association on exit. */