Commit f50f95cab735ebe2993e8d1549f0615bad05f3f2
Committed by
David S. Miller
1 parent
3663c30660
Exists in
master
and in
7 other branches
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
net/sctp/socket.c
... | ... | @@ -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. */ |