diff options
author | Julia Lawall <julia@diku.dk> | 2010-05-22 10:22:49 +0200 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2010-05-22 11:49:37 +0100 |
commit | df1f1d1cb43b4ffdef5ba5f0623e2f73e94ce030 (patch) | |
tree | fdef68b0b5230b9f49f7b26eee33aee4e4f042e3 /drivers/mtd | |
parent | 39c5837d7968ffd68e1d3c79efba1631b7f513d9 (diff) | |
download | kernel_samsung_smdk4412-df1f1d1cb43b4ffdef5ba5f0623e2f73e94ce030.tar.gz kernel_samsung_smdk4412-df1f1d1cb43b4ffdef5ba5f0623e2f73e94ce030.tar.bz2 kernel_samsung_smdk4412-df1f1d1cb43b4ffdef5ba5f0623e2f73e94ce030.zip |
drivers/mtd: Use memdup_user
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>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/mtdchar.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index 8bb5e4a6632..8b223c0343e 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c @@ -404,14 +404,9 @@ static int mtd_do_writeoob(struct file *file, struct mtd_info *mtd, if (ops.ooboffs && ops.ooblen > (mtd->oobsize - ops.ooboffs)) return -EINVAL; - ops.oobbuf = kmalloc(length, GFP_KERNEL); - if (!ops.oobbuf) - return -ENOMEM; - - if (copy_from_user(ops.oobbuf, ptr, length)) { - kfree(ops.oobbuf); - return -EFAULT; - } + ops.oobbuf = memdup_user(ptr, length); + if (IS_ERR(ops.oobbuf)) + return PTR_ERR(ops.oobbuf); start &= ~((uint64_t)mtd->oobsize - 1); ret = mtd->write_oob(mtd, start, &ops); |