aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2013-09-09 11:10:20 -0400
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2013-09-30 15:33:27 -0400
commitb91b396d5e35eef9938a56e781cb0171a53907ca (patch)
treef4abdbfb8c0cc607d457a11004138f90ed71b76b
parent40cd63bf33b21ef4d43776b1d49c605f876fe32c (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.c7
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