Commit 8b57e7c8 authored by Markus Elfring's avatar Markus Elfring Committed by Vasily Gorbik
Browse files

s390/pkey: use memdup_user() to simplify code

Generated by: scripts/coccinelle/api/memdup_user.cocci

Link: http://lkml.kernel.org/r/aca044e8-e4b2-eda8-d724-b08772a44ed9@web.de


[borntraeger@de.ibm.com: use ==0 instead of <=0 for a size_t variable]
[heiko.carstens@de.ibm.com: split bugfix into separate patch; shorten changelog]
Signed-off-by: default avatarMarkus Elfring <Markus.Elfring@web.de>
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent f9cac4fd
Loading
Loading
Loading
Loading
+4 −24
Original line number Diff line number Diff line
@@ -715,38 +715,18 @@ out:

static void *_copy_key_from_user(void __user *ukey, size_t keylen)
{
	void *kkey;

	if (!ukey || keylen < MINKEYBLOBSIZE || keylen > KEYBLOBBUFSIZE)
		return ERR_PTR(-EINVAL);
	kkey = kmalloc(keylen, GFP_KERNEL);
	if (!kkey)
		return ERR_PTR(-ENOMEM);
	if (copy_from_user(kkey, ukey, keylen)) {
		kfree(kkey);
		return ERR_PTR(-EFAULT);
	}

	return kkey;
	return memdup_user(ukey, keylen);
}

static void *_copy_apqns_from_user(void __user *uapqns, size_t nr_apqns)
{
	void *kapqns = NULL;
	size_t nbytes;

	if (uapqns && nr_apqns > 0) {
		nbytes = nr_apqns * sizeof(struct pkey_apqn);
		kapqns = kmalloc(nbytes, GFP_KERNEL);
		if (!kapqns)
			return ERR_PTR(-ENOMEM);
		if (copy_from_user(kapqns, uapqns, nbytes)) {
			kfree(kapqns);
			return ERR_PTR(-EFAULT);
		}
	}
	if (!uapqns || nr_apqns == 0)
		return NULL;

	return kapqns;
	return memdup_user(uapqns, nr_apqns * sizeof(struct pkey_apqn));
}

static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,