diff options
Diffstat (limited to 'net/sctp/socket.c')
| -rw-r--r-- | net/sctp/socket.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 67861a8f00cb..b1917f68723c 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
| @@ -980,6 +980,7 @@ static int __sctp_connect(struct sock* sk, | |||
| 980 | union sctp_addr *sa_addr; | 980 | union sctp_addr *sa_addr; |
| 981 | void *addr_buf; | 981 | void *addr_buf; |
| 982 | unsigned short port; | 982 | unsigned short port; |
| 983 | unsigned int f_flags = 0; | ||
| 983 | 984 | ||
| 984 | sp = sctp_sk(sk); | 985 | sp = sctp_sk(sk); |
| 985 | ep = sp->ep; | 986 | ep = sp->ep; |
| @@ -1106,7 +1107,14 @@ static int __sctp_connect(struct sock* sk, | |||
| 1106 | af->to_sk_daddr(&to, sk); | 1107 | af->to_sk_daddr(&to, sk); |
| 1107 | sk->sk_err = 0; | 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 | err = sctp_wait_for_connect(asoc, &timeo); | 1118 | err = sctp_wait_for_connect(asoc, &timeo); |
| 1111 | 1119 | ||
| 1112 | /* Don't free association on exit. */ | 1120 | /* Don't free association on exit. */ |
| @@ -4170,7 +4178,7 @@ static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to, | |||
| 4170 | to += addrlen; | 4178 | to += addrlen; |
| 4171 | cnt ++; | 4179 | cnt ++; |
| 4172 | space_left -= addrlen; | 4180 | space_left -= addrlen; |
| 4173 | bytes_copied += addrlen; | 4181 | *bytes_copied += addrlen; |
| 4174 | } | 4182 | } |
| 4175 | 4183 | ||
| 4176 | return cnt; | 4184 | return cnt; |
