Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1640831 > unrolled thread

[PATCH] KEYS: use memdup_user

Started byGeliang Tang <geliangtang@gmail.com>
First post2017-05-13 05:20 +0200
Last post2017-05-14 13:40 +0200
Articles 5 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] KEYS: use memdup_user Geliang Tang <geliangtang@gmail.com> - 2017-05-13 05:20 +0200
    [PATCH] usb: gadget: f_fs: use memdup_user Geliang Tang <geliangtang@gmail.com> - 2017-05-13 05:20 +0200
      Re: [PATCH] usb: gadget: f_fs: use memdup_user Dan Carpenter <dan.carpenter@oracle.com> - 2017-05-13 10:10 +0200
        Re: [PATCH] usb: gadget: f_fs: use memdup_user Al Viro <viro@ZenIV.linux.org.uk> - 2017-05-21 05:30 +0200
      Re: [PATCH] usb: gadget: f_fs: use memdup_user Michal Nazarewicz <mina86@mina86.com> - 2017-05-14 13:40 +0200

#1640831 — [PATCH] KEYS: use memdup_user

FromGeliang Tang <geliangtang@gmail.com>
Date2017-05-13 05:20 +0200
Subject[PATCH] KEYS: use memdup_user
Message-ID<tGvL4-6mY-7@gated-at.bofh.it>
Use memdup_user() helper instead of open-coding to simplify the code.

Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
 security/keys/keyctl.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
index dd0da25..ce1574a 100644
--- a/security/keys/keyctl.c
+++ b/security/keys/keyctl.c
@@ -326,14 +326,11 @@ long keyctl_update_key(key_serial_t id,
 	/* pull the payload in if one was supplied */
 	payload = NULL;
 	if (_payload) {
-		ret = -ENOMEM;
-		payload = kmalloc(plen, GFP_KERNEL);
-		if (!payload)
+		payload = memdup_user(_payload, plen);
+		if (IS_ERR(payload)) {
+			ret = PTR_ERR(payload);
 			goto error;
-
-		ret = -EFAULT;
-		if (copy_from_user(payload, _payload, plen) != 0)
-			goto error2;
+		}
 	}
 
 	/* find the target key (which must be writable) */
-- 
2.9.3

[toc] | [next] | [standalone]


#1640832 — [PATCH] usb: gadget: f_fs: use memdup_user

FromGeliang Tang <geliangtang@gmail.com>
Date2017-05-13 05:20 +0200
Subject[PATCH] usb: gadget: f_fs: use memdup_user
Message-ID<tGvL4-6mY-11@gated-at.bofh.it>
In reply to#1640831
Use memdup_user() helper instead of open-coding to simplify the code.

Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
 drivers/usb/gadget/function/f_fs.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index 71dd27c..5754538 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -3692,14 +3692,9 @@ static char *ffs_prepare_buffer(const char __user *buf, size_t len)
 	if (unlikely(!len))
 		return NULL;
 
-	data = kmalloc(len, GFP_KERNEL);
-	if (unlikely(!data))
-		return ERR_PTR(-ENOMEM);
-
-	if (unlikely(copy_from_user(data, buf, len))) {
-		kfree(data);
-		return ERR_PTR(-EFAULT);
-	}
+	data = memdup_user(buf, len);
+	if (unlikely(IS_ERR(data)))
+		return data;
 
 	pr_vdebug("Buffer from user space:\n");
 	ffs_dump_mem("", data, len);
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1640860 — Re: [PATCH] usb: gadget: f_fs: use memdup_user

FromDan Carpenter <dan.carpenter@oracle.com>
Date2017-05-13 10:10 +0200
SubjectRe: [PATCH] usb: gadget: f_fs: use memdup_user
Message-ID<tGAhH-TJ-5@gated-at.bofh.it>
In reply to#1640832
On Sat, May 13, 2017 at 11:15:59AM +0800, Geliang Tang wrote:
> Use memdup_user() helper instead of open-coding to simplify the code.
> 
> Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> ---
>  drivers/usb/gadget/function/f_fs.c | 11 +++--------
>  1 file changed, 3 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
> index 71dd27c..5754538 100644
> --- a/drivers/usb/gadget/function/f_fs.c
> +++ b/drivers/usb/gadget/function/f_fs.c
> @@ -3692,14 +3692,9 @@ static char *ffs_prepare_buffer(const char __user *buf, size_t len)
>  	if (unlikely(!len))
>  		return NULL;
>  
> -	data = kmalloc(len, GFP_KERNEL);
> -	if (unlikely(!data))
> -		return ERR_PTR(-ENOMEM);
> -
> -	if (unlikely(copy_from_user(data, buf, len))) {
> -		kfree(data);
> -		return ERR_PTR(-EFAULT);
> -	}
> +	data = memdup_user(buf, len);
> +	if (unlikely(IS_ERR(data)))

Don't use likely/unlikely() here.  It's not a fast path.

regards,
dan carpenter

[toc] | [prev] | [next] | [standalone]


#1646242 — Re: [PATCH] usb: gadget: f_fs: use memdup_user

FromAl Viro <viro@ZenIV.linux.org.uk>
Date2017-05-21 05:30 +0200
SubjectRe: [PATCH] usb: gadget: f_fs: use memdup_user
Message-ID<tJpJ8-24v-5@gated-at.bofh.it>
In reply to#1640860
On Sat, May 13, 2017 at 11:05:30AM +0300, Dan Carpenter wrote:

> > +	data = memdup_user(buf, len);
> > +	if (unlikely(IS_ERR(data)))
> 
> Don't use likely/unlikely() here.  It's not a fast path.

More to the point,

#define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO)
static inline bool __must_check IS_ERR(__force const void *ptr)
{
	return IS_ERR_VALUE((unsigned long)ptr);
}

IOW, IS_ERR() already produces unlikely(....), fast path or not.

[toc] | [prev] | [next] | [standalone]


#1641074 — Re: [PATCH] usb: gadget: f_fs: use memdup_user

FromMichal Nazarewicz <mina86@mina86.com>
Date2017-05-14 13:40 +0200
SubjectRe: [PATCH] usb: gadget: f_fs: use memdup_user
Message-ID<tH02u-10Y-7@gated-at.bofh.it>
In reply to#1640832
On Sat, May 13 2017, Geliang Tang wrote:
> Use memdup_user() helper instead of open-coding to simplify the code.
>
> Signed-off-by: Geliang Tang <geliangtang@gmail.com>

Acked-by: Michal Nazarewicz <mina86@mina86.com>

> ---
>  drivers/usb/gadget/function/f_fs.c | 11 +++--------
>  1 file changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
> index 71dd27c..5754538 100644
> --- a/drivers/usb/gadget/function/f_fs.c
> +++ b/drivers/usb/gadget/function/f_fs.c
> @@ -3692,14 +3692,9 @@ static char *ffs_prepare_buffer(const char __user *buf, size_t len)
>  	if (unlikely(!len))
>  		return NULL;
>  
> -	data = kmalloc(len, GFP_KERNEL);
> -	if (unlikely(!data))
> -		return ERR_PTR(-ENOMEM);
> -
> -	if (unlikely(copy_from_user(data, buf, len))) {
> -		kfree(data);
> -		return ERR_PTR(-EFAULT);
> -	}
> +	data = memdup_user(buf, len);
> +	if (unlikely(IS_ERR(data)))
> +		return data;
>  
>  	pr_vdebug("Buffer from user space:\n");
>  	ffs_dump_mem("", data, len);

-- 
Best regards
ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
«If at first you don’t succeed, give up skydiving»

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web