* [PATCH 5/27] mm: Use memdup_user
@ 2010-05-22 8:19 Julia Lawall
2010-05-24 1:04 ` KOSAKI Motohiro
0 siblings, 1 reply; 2+ messages in thread
From: Julia Lawall @ 2010-05-22 8:19 UTC (permalink / raw)
To: linux-mm, linux-kernel, kernel-janitors
From: Julia Lawall <julia@diku.dk>
Use memdup_user when user data is immediately copied into the
allocated region.
The semantic patch that makes this change is as follows:
(http://coccinelle.lip6.fr/)
// <smpl>
@@
expression from,to,size,flag;
position p;
identifier l1,l2;
@@
- to = \(kmalloc@p\|kzalloc@p\)(size,flag);
+ to = memdup_user(from,size);
if (
- to==NULL
+ IS_ERR(to)
|| ...) {
<+... when != goto l1;
- -ENOMEM
+ PTR_ERR(to)
...+>
}
- if (copy_from_user(to, from, size) != 0) {
- <+... when != goto l2;
- -EFAULT
- ...+>
- }
// </smpl>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
mm/util.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/mm/util.c b/mm/util.c
index f5712e8..4735ea4 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -225,15 +225,10 @@ char *strndup_user(const char __user *s, long n)
if (length > n)
return ERR_PTR(-EINVAL);
- p = kmalloc(length, GFP_KERNEL);
+ p = memdup_user(s, length);
- if (!p)
- return ERR_PTR(-ENOMEM);
-
- if (copy_from_user(p, s, length)) {
- kfree(p);
- return ERR_PTR(-EFAULT);
- }
+ if (IS_ERR(p))
+ return p;
p[length - 1] = '\0';
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH 5/27] mm: Use memdup_user
2010-05-22 8:19 [PATCH 5/27] mm: Use memdup_user Julia Lawall
@ 2010-05-24 1:04 ` KOSAKI Motohiro
0 siblings, 0 replies; 2+ messages in thread
From: KOSAKI Motohiro @ 2010-05-24 1:04 UTC (permalink / raw)
To: Julia Lawall; +Cc: kosaki.motohiro, linux-mm, linux-kernel, kernel-janitors
> Signed-off-by: Julia Lawall <julia@diku.dk>
>
> ---
> mm/util.c | 11 +++--------
> 1 file changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/mm/util.c b/mm/util.c
> index f5712e8..4735ea4 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -225,15 +225,10 @@ char *strndup_user(const char __user *s, long n)
> if (length > n)
> return ERR_PTR(-EINVAL);
>
> - p = kmalloc(length, GFP_KERNEL);
> + p = memdup_user(s, length);
memdup? Why can't we use strnlen_user() and legitimate length copy?
>
> - if (!p)
> - return ERR_PTR(-ENOMEM);
> -
> - if (copy_from_user(p, s, length)) {
> - kfree(p);
> - return ERR_PTR(-EFAULT);
> - }
> + if (IS_ERR(p))
> + return p;
>
> p[length - 1] = '\0';
>
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-05-24 1:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-05-22 8:19 [PATCH 5/27] mm: Use memdup_user Julia Lawall
2010-05-24 1:04 ` KOSAKI Motohiro
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox