Skip to content

Commit 8238ac0

Browse files
committed
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: David S. Miller <davem@davemloft.net>
2 parents 4825a4e + 3b8d2a6 commit 8238ac0

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

drivers/net/tun.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -731,14 +731,9 @@ static int update_filter(struct tap_filter *filter, void __user *arg)
731731
}
732732

733733
alen = ETH_ALEN * uf.count;
734-
addr = kmalloc(alen, GFP_KERNEL);
735-
if (!addr)
736-
return -ENOMEM;
737-
738-
if (copy_from_user(addr, arg + sizeof(uf), alen)) {
739-
err = -EFAULT;
740-
goto done;
741-
}
734+
addr = memdup_user(arg + sizeof(uf), alen);
735+
if (IS_ERR(addr))
736+
return PTR_ERR(addr);
742737

743738
/* The filter is updated without holding any locks. Which is
744739
* 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)
758753
for (; n < uf.count; n++) {
759754
if (!is_multicast_ether_addr(addr[n].u)) {
760755
err = 0; /* no filter */
761-
goto done;
756+
goto free_addr;
762757
}
763758
addr_hash_set(filter->mask, addr[n].u);
764759
}
@@ -774,8 +769,7 @@ static int update_filter(struct tap_filter *filter, void __user *arg)
774769

775770
/* Return the number of exact filters */
776771
err = nexact;
777-
778-
done:
772+
free_addr:
779773
kfree(addr);
780774
return err;
781775
}

0 commit comments

Comments
 (0)