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

Commit a2c841d9 authored by Al Viro's avatar Al Viro
Browse files

do_ip_setsockopt(): don't open-code memdup_user()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 43727da9
Loading
Loading
Loading
Loading
+6 −14
Original line number Diff line number Diff line
@@ -934,14 +934,9 @@ static int do_ip_setsockopt(struct sock *sk, int level,
			err = -ENOBUFS;
			break;
		}
		msf = kmalloc(optlen, GFP_KERNEL);
		if (!msf) {
			err = -ENOBUFS;
			break;
		}
		err = -EFAULT;
		if (copy_from_user(msf, optval, optlen)) {
			kfree(msf);
		msf = memdup_user(optval, optlen);
		if (IS_ERR(msf)) {
			err = PTR_ERR(msf);
			break;
		}
		/* numsrc >= (1G-4) overflow in 32 bits */
@@ -1090,14 +1085,11 @@ static int do_ip_setsockopt(struct sock *sk, int level,
			err = -ENOBUFS;
			break;
		}
		gsf = kmalloc(optlen, GFP_KERNEL);
		if (!gsf) {
			err = -ENOBUFS;
		gsf = memdup_user(optval, optlen);
		if (IS_ERR(gsf)) {
			err = PTR_ERR(gsf);
			break;
		}
		err = -EFAULT;
		if (copy_from_user(gsf, optval, optlen))
			goto mc_msf_out;

		/* numsrc >= (4G-140)/128 overflow in 32 bits */
		if (gsf->gf_numsrc >= 0x1ffffff ||