Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0aae24eb authored by Jozsef Kadlecsik's avatar Jozsef Kadlecsik
Browse files

netfilter: ipset: Fix hash type expire: release empty hash bucket block



When all entries are expired/all slots are empty, release the bucket.

Signed-off-by: default avatarJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
parent e9dfdc05
Loading
Loading
Loading
Loading
+9 −4
Original line number Original line Diff line number Diff line
@@ -476,7 +476,7 @@ static void
mtype_expire(struct ip_set *set, struct htype *h, u8 nets_length, size_t dsize)
mtype_expire(struct ip_set *set, struct htype *h, u8 nets_length, size_t dsize)
{
{
	struct htable *t;
	struct htable *t;
	struct hbucket *n;
	struct hbucket *n, *tmp;
	struct mtype_elem *data;
	struct mtype_elem *data;
	u32 i, j, d;
	u32 i, j, d;
#ifdef IP_SET_HASH_WITH_NETS
#ifdef IP_SET_HASH_WITH_NETS
@@ -511,7 +511,12 @@ mtype_expire(struct ip_set *set, struct htype *h, u8 nets_length, size_t dsize)
			}
			}
		}
		}
		if (d >= AHASH_INIT_SIZE) {
		if (d >= AHASH_INIT_SIZE) {
			struct hbucket *tmp = kzalloc(sizeof(*tmp) +
			if (d >= n->size) {
				rcu_assign_pointer(hbucket(t, i), NULL);
				kfree_rcu(n, rcu);
				continue;
			}
			tmp = kzalloc(sizeof(*tmp) +
				      (n->size - AHASH_INIT_SIZE) * dsize,
				      (n->size - AHASH_INIT_SIZE) * dsize,
				      GFP_ATOMIC);
				      GFP_ATOMIC);
			if (!tmp)
			if (!tmp)