diff options
| -rw-r--r-- | net/ipv4/udp.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index c47c989cb1fb..c8bee189a193 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
| @@ -1614,7 +1614,8 @@ static struct sock *udp_get_next(struct seq_file *seq, struct sock *sk) | |||
| 1614 | } while (sk && (!net_eq(sock_net(sk), net) || sk->sk_family != state->family)); | 1614 | } while (sk && (!net_eq(sock_net(sk), net) || sk->sk_family != state->family)); |
| 1615 | 1615 | ||
| 1616 | if (!sk) { | 1616 | if (!sk) { |
| 1617 | spin_unlock_bh(&state->udp_table->hash[state->bucket].lock); | 1617 | if (state->bucket < UDP_HTABLE_SIZE) |
| 1618 | spin_unlock_bh(&state->udp_table->hash[state->bucket].lock); | ||
| 1618 | return udp_get_first(seq, state->bucket + 1); | 1619 | return udp_get_first(seq, state->bucket + 1); |
| 1619 | } | 1620 | } |
| 1620 | return sk; | 1621 | return sk; |
| @@ -1632,6 +1633,9 @@ static struct sock *udp_get_idx(struct seq_file *seq, loff_t pos) | |||
| 1632 | 1633 | ||
| 1633 | static void *udp_seq_start(struct seq_file *seq, loff_t *pos) | 1634 | static void *udp_seq_start(struct seq_file *seq, loff_t *pos) |
| 1634 | { | 1635 | { |
| 1636 | struct udp_iter_state *state = seq->private; | ||
| 1637 | state->bucket = UDP_HTABLE_SIZE; | ||
| 1638 | |||
| 1635 | return *pos ? udp_get_idx(seq, *pos-1) : SEQ_START_TOKEN; | 1639 | return *pos ? udp_get_idx(seq, *pos-1) : SEQ_START_TOKEN; |
| 1636 | } | 1640 | } |
| 1637 | 1641 | ||
