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

Commit 8238ac0c authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'tun-cleanups'



Markus Elfring says:

====================
tun: Fine-tuning for update_filter()

A few update suggestions were taken into account
from static source code analysis.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 4825a4e4 3b8d2a69
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -731,14 +731,9 @@ static int update_filter(struct tap_filter *filter, void __user *arg)
	}

	alen = ETH_ALEN * uf.count;
	addr = kmalloc(alen, GFP_KERNEL);
	if (!addr)
		return -ENOMEM;

	if (copy_from_user(addr, arg + sizeof(uf), alen)) {
		err = -EFAULT;
		goto done;
	}
	addr = memdup_user(arg + sizeof(uf), alen);
	if (IS_ERR(addr))
		return PTR_ERR(addr);

	/* The filter is updated without holding any locks. Which is
	 * perfectly safe. We disable it first and in the worst
@@ -758,7 +753,7 @@ static int update_filter(struct tap_filter *filter, void __user *arg)
	for (; n < uf.count; n++) {
		if (!is_multicast_ether_addr(addr[n].u)) {
			err = 0; /* no filter */
			goto done;
			goto free_addr;
		}
		addr_hash_set(filter->mask, addr[n].u);
	}
@@ -774,8 +769,7 @@ static int update_filter(struct tap_filter *filter, void __user *arg)

	/* Return the number of exact filters */
	err = nexact;

done:
free_addr:
	kfree(addr);
	return err;
}