diff options
Diffstat (limited to 'net/sctp/proc.c')
| -rw-r--r-- | net/sctp/proc.c | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/net/sctp/proc.c b/net/sctp/proc.c index 6e4dc28874d7..1b5e5b119f79 100644 --- a/net/sctp/proc.c +++ b/net/sctp/proc.c | |||
| @@ -176,7 +176,7 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa | |||
| 176 | 176 | ||
| 177 | static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos) | 177 | static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos) |
| 178 | { | 178 | { |
| 179 | if (*pos > sctp_ep_hashsize) | 179 | if (*pos >= sctp_ep_hashsize) |
| 180 | return NULL; | 180 | return NULL; |
| 181 | 181 | ||
| 182 | if (*pos < 0) | 182 | if (*pos < 0) |
| @@ -185,8 +185,6 @@ static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos) | |||
| 185 | if (*pos == 0) | 185 | if (*pos == 0) |
| 186 | seq_printf(seq, " ENDPT SOCK STY SST HBKT LPORT UID INODE LADDRS\n"); | 186 | seq_printf(seq, " ENDPT SOCK STY SST HBKT LPORT UID INODE LADDRS\n"); |
| 187 | 187 | ||
| 188 | ++*pos; | ||
| 189 | |||
| 190 | return (void *)pos; | 188 | return (void *)pos; |
| 191 | } | 189 | } |
| 192 | 190 | ||
| @@ -198,11 +196,9 @@ static void sctp_eps_seq_stop(struct seq_file *seq, void *v) | |||
| 198 | 196 | ||
| 199 | static void * sctp_eps_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 197 | static void * sctp_eps_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
| 200 | { | 198 | { |
| 201 | if (*pos > sctp_ep_hashsize) | 199 | if (++*pos >= sctp_ep_hashsize) |
| 202 | return NULL; | 200 | return NULL; |
| 203 | 201 | ||
| 204 | ++*pos; | ||
| 205 | |||
| 206 | return pos; | 202 | return pos; |
| 207 | } | 203 | } |
| 208 | 204 | ||
| @@ -216,17 +212,17 @@ static int sctp_eps_seq_show(struct seq_file *seq, void *v) | |||
| 216 | struct sock *sk; | 212 | struct sock *sk; |
| 217 | int hash = *(int *)v; | 213 | int hash = *(int *)v; |
| 218 | 214 | ||
| 219 | if (hash > sctp_ep_hashsize) | 215 | if (hash >= sctp_ep_hashsize) |
| 220 | return -ENOMEM; | 216 | return -ENOMEM; |
| 221 | 217 | ||
| 222 | head = &sctp_ep_hashtable[hash-1]; | 218 | head = &sctp_ep_hashtable[hash]; |
| 223 | sctp_local_bh_disable(); | 219 | sctp_local_bh_disable(); |
| 224 | read_lock(&head->lock); | 220 | read_lock(&head->lock); |
| 225 | for (epb = head->chain; epb; epb = epb->next) { | 221 | for (epb = head->chain; epb; epb = epb->next) { |
| 226 | ep = sctp_ep(epb); | 222 | ep = sctp_ep(epb); |
| 227 | sk = epb->sk; | 223 | sk = epb->sk; |
| 228 | seq_printf(seq, "%8p %8p %-3d %-3d %-4d %-5d %5d %5lu ", ep, sk, | 224 | seq_printf(seq, "%8p %8p %-3d %-3d %-4d %-5d %5d %5lu ", ep, sk, |
| 229 | sctp_sk(sk)->type, sk->sk_state, hash-1, | 225 | sctp_sk(sk)->type, sk->sk_state, hash, |
| 230 | epb->bind_addr.port, | 226 | epb->bind_addr.port, |
| 231 | sock_i_uid(sk), sock_i_ino(sk)); | 227 | sock_i_uid(sk), sock_i_ino(sk)); |
| 232 | 228 | ||
| @@ -283,7 +279,7 @@ void sctp_eps_proc_exit(void) | |||
| 283 | 279 | ||
| 284 | static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos) | 280 | static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos) |
| 285 | { | 281 | { |
| 286 | if (*pos > sctp_assoc_hashsize) | 282 | if (*pos >= sctp_assoc_hashsize) |
| 287 | return NULL; | 283 | return NULL; |
| 288 | 284 | ||
| 289 | if (*pos < 0) | 285 | if (*pos < 0) |
| @@ -293,8 +289,6 @@ static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos) | |||
| 293 | seq_printf(seq, " ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT " | 289 | seq_printf(seq, " ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT " |
| 294 | "RPORT LADDRS <-> RADDRS\n"); | 290 | "RPORT LADDRS <-> RADDRS\n"); |
| 295 | 291 | ||
| 296 | ++*pos; | ||
| 297 | |||
| 298 | return (void *)pos; | 292 | return (void *)pos; |
| 299 | } | 293 | } |
| 300 | 294 | ||
| @@ -306,11 +300,9 @@ static void sctp_assocs_seq_stop(struct seq_file *seq, void *v) | |||
| 306 | 300 | ||
| 307 | static void * sctp_assocs_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 301 | static void * sctp_assocs_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
| 308 | { | 302 | { |
| 309 | if (*pos > sctp_assoc_hashsize) | 303 | if (++*pos >= sctp_assoc_hashsize) |
| 310 | return NULL; | 304 | return NULL; |
| 311 | 305 | ||
| 312 | ++*pos; | ||
| 313 | |||
| 314 | return pos; | 306 | return pos; |
| 315 | } | 307 | } |
| 316 | 308 | ||
| @@ -323,10 +315,10 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v) | |||
| 323 | struct sock *sk; | 315 | struct sock *sk; |
| 324 | int hash = *(int *)v; | 316 | int hash = *(int *)v; |
| 325 | 317 | ||
| 326 | if (hash > sctp_assoc_hashsize) | 318 | if (hash >= sctp_assoc_hashsize) |
| 327 | return -ENOMEM; | 319 | return -ENOMEM; |
| 328 | 320 | ||
| 329 | head = &sctp_assoc_hashtable[hash-1]; | 321 | head = &sctp_assoc_hashtable[hash]; |
| 330 | sctp_local_bh_disable(); | 322 | sctp_local_bh_disable(); |
| 331 | read_lock(&head->lock); | 323 | read_lock(&head->lock); |
| 332 | for (epb = head->chain; epb; epb = epb->next) { | 324 | for (epb = head->chain; epb; epb = epb->next) { |
| @@ -335,7 +327,7 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v) | |||
| 335 | seq_printf(seq, | 327 | seq_printf(seq, |
| 336 | "%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d ", | 328 | "%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d ", |
| 337 | assoc, sk, sctp_sk(sk)->type, sk->sk_state, | 329 | assoc, sk, sctp_sk(sk)->type, sk->sk_state, |
| 338 | assoc->state, hash-1, assoc->assoc_id, | 330 | assoc->state, hash, assoc->assoc_id, |
| 339 | (sk->sk_rcvbuf - assoc->rwnd), | 331 | (sk->sk_rcvbuf - assoc->rwnd), |
| 340 | assoc->sndbuf_used, | 332 | assoc->sndbuf_used, |
| 341 | sock_i_uid(sk), sock_i_ino(sk), | 333 | sock_i_uid(sk), sock_i_ino(sk), |
