mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
netfilter: ipset: list:set: fix reference counter update
The last element can be replaced or pushed off and in both cases the reference counter must be updated. Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
3a7b21eaf4
commit
02f815cb6d
1 changed files with 7 additions and 3 deletions
|
@ -174,9 +174,13 @@ list_set_add(struct list_set *map, u32 i, ip_set_id_t id,
|
|||
{
|
||||
const struct set_elem *e = list_set_elem(map, i);
|
||||
|
||||
if (i == map->size - 1 && e->id != IPSET_INVALID_ID)
|
||||
/* Last element replaced: e.g. add new,before,last */
|
||||
ip_set_put_byindex(e->id);
|
||||
if (e->id != IPSET_INVALID_ID) {
|
||||
const struct set_elem *x = list_set_elem(map, map->size - 1);
|
||||
|
||||
/* Last element replaced or pushed off */
|
||||
if (x->id != IPSET_INVALID_ID)
|
||||
ip_set_put_byindex(x->id);
|
||||
}
|
||||
if (with_timeout(map->timeout))
|
||||
list_elem_tadd(map, i, id, ip_set_timeout_set(timeout));
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue