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

Commit a92c5751 authored by Kees Cook's avatar Kees Cook Committed by David S. Miller
Browse files

netfilter: ipset: Convert timers to use timer_setup()



In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new timer_setup() and from_timer()
to pass the timer pointer explicitly. This introduces a pointer back to the
struct ip_set, which is used instead of the struct timer_list .data field.

Cc: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Cc: Florian Westphal <fw@strlen.de>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Cc: simran singhal <singhalsimran0@gmail.com>
Cc: Muhammad Falak R Wani <falakreyaz@gmail.com>
Cc: netfilter-devel@vger.kernel.org
Cc: coreteam@netfilter.org
Cc: netdev@vger.kernel.org
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cdeabbb8
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -37,11 +37,11 @@
#define get_ext(set, map, id)	((map)->extensions + ((set)->dsize * (id)))

static void
mtype_gc_init(struct ip_set *set, void (*gc)(unsigned long ul_set))
mtype_gc_init(struct ip_set *set, void (*gc)(struct timer_list *t))
{
	struct mtype *map = set->data;

	setup_timer(&map->gc, gc, (unsigned long)set);
	timer_setup(&map->gc, gc, 0);
	mod_timer(&map->gc, jiffies + IPSET_GC_PERIOD(set->timeout) * HZ);
}

@@ -272,10 +272,10 @@ mtype_list(const struct ip_set *set,
}

static void
mtype_gc(unsigned long ul_set)
mtype_gc(struct timer_list *t)
{
	struct ip_set *set = (struct ip_set *)ul_set;
	struct mtype *map = set->data;
	struct mtype *map = from_timer(map, t, gc);
	struct ip_set *set = map->set;
	void *x;
	u32 id;

+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ struct bitmap_ip {
	size_t memsize;		/* members size */
	u8 netmask;		/* subnet netmask */
	struct timer_list gc;	/* garbage collection */
	struct ip_set *set;	/* attached to this ip_set */
	unsigned char extensions[0]	/* data extensions */
		__aligned(__alignof__(u64));
};
@@ -232,6 +233,7 @@ init_map_ip(struct ip_set *set, struct bitmap_ip *map,
	map->netmask = netmask;
	set->timeout = IPSET_NO_TIMEOUT;

	map->set = set;
	set->data = map;
	set->family = NFPROTO_IPV4;

+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ struct bitmap_ipmac {
	u32 elements;		/* number of max elements in the set */
	size_t memsize;		/* members size */
	struct timer_list gc;	/* garbage collector */
	struct ip_set *set;	/* attached to this ip_set */
	unsigned char extensions[0]	/* MAC + data extensions */
		__aligned(__alignof__(u64));
};
@@ -307,6 +308,7 @@ init_map_ipmac(struct ip_set *set, struct bitmap_ipmac *map,
	map->elements = elements;
	set->timeout = IPSET_NO_TIMEOUT;

	map->set = set;
	set->data = map;
	set->family = NFPROTO_IPV4;

+2 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ struct bitmap_port {
	u32 elements;		/* number of max elements in the set */
	size_t memsize;		/* members size */
	struct timer_list gc;	/* garbage collection */
	struct ip_set *set;	/* attached to this ip_set */
	unsigned char extensions[0]	/* data extensions */
		__aligned(__alignof__(u64));
};
@@ -214,6 +215,7 @@ init_map_port(struct ip_set *set, struct bitmap_port *map,
	map->last_port = last_port;
	set->timeout = IPSET_NO_TIMEOUT;

	map->set = set;
	set->data = map;
	set->family = NFPROTO_UNSPEC;

+7 −5
Original line number Diff line number Diff line
@@ -280,6 +280,7 @@ htable_bits(u32 hashsize)
struct htype {
	struct htable __rcu *table; /* the hash table */
	struct timer_list gc;	/* garbage collection when timeout enabled */
	struct ip_set *set;	/* attached to this ip_set */
	u32 maxelem;		/* max elements in the hash */
	u32 initval;		/* random jhash init value */
#ifdef IP_SET_HASH_WITH_MARKMASK
@@ -429,11 +430,11 @@ mtype_destroy(struct ip_set *set)
}

static void
mtype_gc_init(struct ip_set *set, void (*gc)(unsigned long ul_set))
mtype_gc_init(struct ip_set *set, void (*gc)(struct timer_list *t))
{
	struct htype *h = set->data;

	setup_timer(&h->gc, gc, (unsigned long)set);
	timer_setup(&h->gc, gc, 0);
	mod_timer(&h->gc, jiffies + IPSET_GC_PERIOD(set->timeout) * HZ);
	pr_debug("gc initialized, run in every %u\n",
		 IPSET_GC_PERIOD(set->timeout));
@@ -526,10 +527,10 @@ mtype_expire(struct ip_set *set, struct htype *h)
}

static void
mtype_gc(unsigned long ul_set)
mtype_gc(struct timer_list *t)
{
	struct ip_set *set = (struct ip_set *)ul_set;
	struct htype *h = set->data;
	struct htype *h = from_timer(h, t, gc);
	struct ip_set *set = h->set;

	pr_debug("called\n");
	spin_lock_bh(&set->lock);
@@ -1314,6 +1315,7 @@ IPSET_TOKEN(HTYPE, _create)(struct net *net, struct ip_set *set,
	t->htable_bits = hbits;
	RCU_INIT_POINTER(h->table, t);

	h->set = set;
	set->data = h;
#ifndef IP_SET_PROTO_UNDEF
	if (set->family == NFPROTO_IPV4) {
Loading