diff options
author | Julia Lawall <julia@diku.dk> | 2010-05-26 17:42:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-27 12:12:41 -0400 |
commit | 7ca5ca60cba37fc4d8e99583da147faed3039ad0 (patch) | |
tree | c68aaea107be75e0c48ed330716bcfc3f61f87a7 /fs/autofs4 | |
parent | b81d67a50c0f3021d170466388bec3e7fc3abe75 (diff) |
fs/autofs4: use memdup_user
Use memdup_user when user data is immediately copied into the allocated
region. Elimination of the variable ads, which is no longer useful.
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>
Cc: Ian Kent <raven@themaw.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/autofs4')
-rw-r--r-- | fs/autofs4/dev-ioctl.c | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/fs/autofs4/dev-ioctl.c b/fs/autofs4/dev-ioctl.c index d832062869f6..ba4a38b9c22f 100644 --- a/fs/autofs4/dev-ioctl.c +++ b/fs/autofs4/dev-ioctl.c | |||
@@ -95,7 +95,7 @@ static int check_dev_ioctl_version(int cmd, struct autofs_dev_ioctl *param) | |||
95 | */ | 95 | */ |
96 | static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *in) | 96 | static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *in) |
97 | { | 97 | { |
98 | struct autofs_dev_ioctl tmp, *ads; | 98 | struct autofs_dev_ioctl tmp; |
99 | 99 | ||
100 | if (copy_from_user(&tmp, in, sizeof(tmp))) | 100 | if (copy_from_user(&tmp, in, sizeof(tmp))) |
101 | return ERR_PTR(-EFAULT); | 101 | return ERR_PTR(-EFAULT); |
@@ -103,16 +103,7 @@ static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *i | |||
103 | if (tmp.size < sizeof(tmp)) | 103 | if (tmp.size < sizeof(tmp)) |
104 | return ERR_PTR(-EINVAL); | 104 | return ERR_PTR(-EINVAL); |
105 | 105 | ||
106 | ads = kmalloc(tmp.size, GFP_KERNEL); | 106 | return memdup_user(in, tmp.size); |
107 | if (!ads) | ||
108 | return ERR_PTR(-ENOMEM); | ||
109 | |||
110 | if (copy_from_user(ads, in, tmp.size)) { | ||
111 | kfree(ads); | ||
112 | return ERR_PTR(-EFAULT); | ||
113 | } | ||
114 | |||
115 | return ads; | ||
116 | } | 107 | } |
117 | 108 | ||
118 | static inline void free_dev_ioctl(struct autofs_dev_ioctl *param) | 109 | static inline void free_dev_ioctl(struct autofs_dev_ioctl *param) |