diff options
Diffstat (limited to 'net/ipv4/inet_diag.c')
-rw-r--r-- | net/ipv4/inet_diag.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index a0f52dac8940..e34dccbc4d70 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c | |||
@@ -930,12 +930,15 @@ skip_listen_ht: | |||
930 | spin_lock_bh(lock); | 930 | spin_lock_bh(lock); |
931 | sk_nulls_for_each(sk, node, &head->chain) { | 931 | sk_nulls_for_each(sk, node, &head->chain) { |
932 | int res; | 932 | int res; |
933 | int state; | ||
933 | 934 | ||
934 | if (!net_eq(sock_net(sk), net)) | 935 | if (!net_eq(sock_net(sk), net)) |
935 | continue; | 936 | continue; |
936 | if (num < s_num) | 937 | if (num < s_num) |
937 | goto next_normal; | 938 | goto next_normal; |
938 | if (!(r->idiag_states & (1 << sk->sk_state))) | 939 | state = (sk->sk_state == TCP_TIME_WAIT) ? |
940 | inet_twsk(sk)->tw_substate : sk->sk_state; | ||
941 | if (!(r->idiag_states & (1 << state))) | ||
939 | goto next_normal; | 942 | goto next_normal; |
940 | if (r->sdiag_family != AF_UNSPEC && | 943 | if (r->sdiag_family != AF_UNSPEC && |
941 | sk->sk_family != r->sdiag_family) | 944 | sk->sk_family != r->sdiag_family) |