summaryrefslogtreecommitdiffstats
path: root/kernel/net/netfilter/ipset
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2013-09-09 17:10:20 +0200
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2013-09-09 17:27:42 +0200
commit626108c344afb22eccf419b8f76c06b2d2fffd62 (patch)
tree23ed2b76300548a6ad0391449e945b8b4ff0e15d /kernel/net/netfilter/ipset
parent92f6f53bd43ccd59cbc141156737a3c4eefeea93 (diff)
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.
Diffstat (limited to 'kernel/net/netfilter/ipset')
-rw-r--r--kernel/net/netfilter/ipset/ip_set_list_set.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/net/netfilter/ipset/ip_set_list_set.c b/kernel/net/netfilter/ipset/ip_set_list_set.c
index e44986a..30bf1dd 100644
--- a/kernel/net/netfilter/ipset/ip_set_list_set.c
+++ b/kernel/net/netfilter/ipset/ip_set_list_set.c
@@ -218,13 +218,16 @@ set_cleanup_entries(struct ip_set *set)
{
struct list_set *map = set->data;
struct set_elem *e;
- u32 i;
+ u32 i = 0;
- for (i = 0; i < map->size; i++) {
+ while (i < map->size) {
e = list_set_elem(set, map, i);
if (e->id != IPSET_INVALID_ID &&
ip_set_timeout_expired(ext_timeout(e, set)))
list_set_del(set, i);
+ /* Check element moved to position i in next loop */
+ else
+ i++;
}
}