|
@@ -176,7 +176,7 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa
|
|
|
|
|
|
static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos)
|
|
static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos)
|
|
{
|
|
{
|
|
- if (*pos > sctp_ep_hashsize)
|
|
|
|
|
|
+ if (*pos >= sctp_ep_hashsize)
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
if (*pos < 0)
|
|
if (*pos < 0)
|
|
@@ -185,8 +185,6 @@ static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos)
|
|
if (*pos == 0)
|
|
if (*pos == 0)
|
|
seq_printf(seq, " ENDPT SOCK STY SST HBKT LPORT UID INODE LADDRS\n");
|
|
seq_printf(seq, " ENDPT SOCK STY SST HBKT LPORT UID INODE LADDRS\n");
|
|
|
|
|
|
- ++*pos;
|
|
|
|
-
|
|
|
|
return (void *)pos;
|
|
return (void *)pos;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -198,11 +196,9 @@ static void sctp_eps_seq_stop(struct seq_file *seq, void *v)
|
|
|
|
|
|
static void * sctp_eps_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
|
static void * sctp_eps_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
|
{
|
|
{
|
|
- if (*pos > sctp_ep_hashsize)
|
|
|
|
|
|
+ if (++*pos >= sctp_ep_hashsize)
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
- ++*pos;
|
|
|
|
-
|
|
|
|
return pos;
|
|
return pos;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -216,17 +212,17 @@ static int sctp_eps_seq_show(struct seq_file *seq, void *v)
|
|
struct sock *sk;
|
|
struct sock *sk;
|
|
int hash = *(int *)v;
|
|
int hash = *(int *)v;
|
|
|
|
|
|
- if (hash > sctp_ep_hashsize)
|
|
|
|
|
|
+ if (hash >= sctp_ep_hashsize)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
- head = &sctp_ep_hashtable[hash-1];
|
|
|
|
|
|
+ head = &sctp_ep_hashtable[hash];
|
|
sctp_local_bh_disable();
|
|
sctp_local_bh_disable();
|
|
read_lock(&head->lock);
|
|
read_lock(&head->lock);
|
|
for (epb = head->chain; epb; epb = epb->next) {
|
|
for (epb = head->chain; epb; epb = epb->next) {
|
|
ep = sctp_ep(epb);
|
|
ep = sctp_ep(epb);
|
|
sk = epb->sk;
|
|
sk = epb->sk;
|
|
seq_printf(seq, "%8p %8p %-3d %-3d %-4d %-5d %5d %5lu ", ep, sk,
|
|
seq_printf(seq, "%8p %8p %-3d %-3d %-4d %-5d %5d %5lu ", ep, sk,
|
|
- sctp_sk(sk)->type, sk->sk_state, hash-1,
|
|
|
|
|
|
+ sctp_sk(sk)->type, sk->sk_state, hash,
|
|
epb->bind_addr.port,
|
|
epb->bind_addr.port,
|
|
sock_i_uid(sk), sock_i_ino(sk));
|
|
sock_i_uid(sk), sock_i_ino(sk));
|
|
|
|
|
|
@@ -283,7 +279,7 @@ void sctp_eps_proc_exit(void)
|
|
|
|
|
|
static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos)
|
|
static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos)
|
|
{
|
|
{
|
|
- if (*pos > sctp_assoc_hashsize)
|
|
|
|
|
|
+ if (*pos >= sctp_assoc_hashsize)
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
if (*pos < 0)
|
|
if (*pos < 0)
|
|
@@ -293,8 +289,6 @@ static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos)
|
|
seq_printf(seq, " ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT "
|
|
seq_printf(seq, " ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT "
|
|
"RPORT LADDRS <-> RADDRS\n");
|
|
"RPORT LADDRS <-> RADDRS\n");
|
|
|
|
|
|
- ++*pos;
|
|
|
|
-
|
|
|
|
return (void *)pos;
|
|
return (void *)pos;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -306,11 +300,9 @@ static void sctp_assocs_seq_stop(struct seq_file *seq, void *v)
|
|
|
|
|
|
static void * sctp_assocs_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
|
static void * sctp_assocs_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
|
{
|
|
{
|
|
- if (*pos > sctp_assoc_hashsize)
|
|
|
|
|
|
+ if (++*pos >= sctp_assoc_hashsize)
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
- ++*pos;
|
|
|
|
-
|
|
|
|
return pos;
|
|
return pos;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -323,10 +315,10 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
|
|
struct sock *sk;
|
|
struct sock *sk;
|
|
int hash = *(int *)v;
|
|
int hash = *(int *)v;
|
|
|
|
|
|
- if (hash > sctp_assoc_hashsize)
|
|
|
|
|
|
+ if (hash >= sctp_assoc_hashsize)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
- head = &sctp_assoc_hashtable[hash-1];
|
|
|
|
|
|
+ head = &sctp_assoc_hashtable[hash];
|
|
sctp_local_bh_disable();
|
|
sctp_local_bh_disable();
|
|
read_lock(&head->lock);
|
|
read_lock(&head->lock);
|
|
for (epb = head->chain; epb; epb = epb->next) {
|
|
for (epb = head->chain; epb; epb = epb->next) {
|
|
@@ -335,7 +327,7 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
|
|
seq_printf(seq,
|
|
seq_printf(seq,
|
|
"%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d ",
|
|
"%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d ",
|
|
assoc, sk, sctp_sk(sk)->type, sk->sk_state,
|
|
assoc, sk, sctp_sk(sk)->type, sk->sk_state,
|
|
- assoc->state, hash-1, assoc->assoc_id,
|
|
|
|
|
|
+ assoc->state, hash, assoc->assoc_id,
|
|
(sk->sk_rcvbuf - assoc->rwnd),
|
|
(sk->sk_rcvbuf - assoc->rwnd),
|
|
assoc->sndbuf_used,
|
|
assoc->sndbuf_used,
|
|
sock_i_uid(sk), sock_i_ino(sk),
|
|
sock_i_uid(sk), sock_i_ino(sk),
|