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

Commit e0b7cde9 authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller
Browse files

[NETFILTER]: arp_tables: fix table locking in arpt_do_table



table->private might change because of ruleset changes, don't use it
without holding the lock.

Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2d8f6131
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -236,7 +236,7 @@ unsigned int arpt_do_table(struct sk_buff **pskb,
	struct arpt_entry *e, *back;
	const char *indev, *outdev;
	void *table_base;
	struct xt_table_info *private = table->private;
	struct xt_table_info *private;

	/* ARP header, plus 2 device addresses, plus 2 IP addresses.  */
	if (!pskb_may_pull((*pskb), (sizeof(struct arphdr) +
@@ -248,6 +248,7 @@ unsigned int arpt_do_table(struct sk_buff **pskb,
	outdev = out ? out->name : nulldevname;

	read_lock_bh(&table->lock);
	private = table->private;
	table_base = (void *)private->entries[smp_processor_id()];
	e = get_entry(table_base, private->hook_entry[hook]);
	back = get_entry(table_base, private->underflow[hook]);