diff options
author | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2013-09-09 11:10:20 -0400 |
---|---|---|
committer | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2013-09-30 15:33:27 -0400 |
commit | b91b396d5e35eef9938a56e781cb0171a53907ca (patch) | |
tree | f4abdbfb8c0cc607d457a11004138f90ed71b76b | |
parent | 40cd63bf33b21ef4d43776b1d49c605f876fe32c (diff) |
netfilter: ipset: list:set: make sure all elements are checked by the gc
When an element timed out, the next one was skipped by the garbage
collector, fixed.
Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
-rw-r--r-- | net/netfilter/ipset/ip_set_list_set.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c index e44986af1fc2..30bf1dd11f04 100644 --- a/net/netfilter/ipset/ip_set_list_set.c +++ b/net/netfilter/ipset/ip_set_list_set.c | |||
@@ -218,13 +218,16 @@ set_cleanup_entries(struct ip_set *set) | |||
218 | { | 218 | { |
219 | struct list_set *map = set->data; | 219 | struct list_set *map = set->data; |
220 | struct set_elem *e; | 220 | struct set_elem *e; |
221 | u32 i; | 221 | u32 i = 0; |
222 | 222 | ||
223 | for (i = 0; i < map->size; i++) { | 223 | while (i < map->size) { |
224 | e = list_set_elem(set, map, i); | 224 | e = list_set_elem(set, map, i); |
225 | if (e->id != IPSET_INVALID_ID && | 225 | if (e->id != IPSET_INVALID_ID && |
226 | ip_set_timeout_expired(ext_timeout(e, set))) | 226 | ip_set_timeout_expired(ext_timeout(e, set))) |
227 | list_set_del(set, i); | 227 | list_set_del(set, i); |
228 | /* Check element moved to position i in next loop */ | ||
229 | else | ||
230 | i++; | ||
228 | } | 231 | } |
229 | } | 232 | } |
230 | 233 | ||