Message ID | 1028812604e64cd8e1ca2e25b119200fdbec2049.1493781496.git.geliangtang@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | f7929436a286ca31f0365a7013de968017f76818 |
Headers | show |
On Sat, May 6, 2017 at 5:42 PM, Geliang Tang <geliangtang@gmail.com> wrote: > Use memdup_user() helper instead of open-coding to simplify the code. > > Signed-off-by: Geliang Tang <geliangtang@gmail.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> > --- a/drivers/spi/spidev.c > +++ b/drivers/spi/spidev.c > @@ -325,7 +325,6 @@ static struct spi_ioc_transfer * > spidev_get_ioc_message(unsigned int cmd, struct spi_ioc_transfer __user *u_ioc, > unsigned *n_ioc) > { > - struct spi_ioc_transfer *ioc; > u32 tmp; > > /* Check type, command number and direction */ > @@ -342,14 +341,7 @@ spidev_get_ioc_message(unsigned int cmd, struct spi_ioc_transfer __user *u_ioc, > return NULL; > > /* copy into scratch area */ > - ioc = kmalloc(tmp, GFP_KERNEL); > - if (!ioc) > - return ERR_PTR(-ENOMEM); > - if (__copy_from_user(ioc, u_ioc, tmp)) { Note that as memdup_user() calls copy_from_user(), it repeats the access_ok() check already done by spidev_ioctl(). > - kfree(ioc); > - return ERR_PTR(-EFAULT); > - } > - return ioc; > + return memdup_user(u_ioc, tmp); Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c index 9a2a79a..b00a88f 100644 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c @@ -325,7 +325,6 @@ static struct spi_ioc_transfer * spidev_get_ioc_message(unsigned int cmd, struct spi_ioc_transfer __user *u_ioc, unsigned *n_ioc) { - struct spi_ioc_transfer *ioc; u32 tmp; /* Check type, command number and direction */ @@ -342,14 +341,7 @@ spidev_get_ioc_message(unsigned int cmd, struct spi_ioc_transfer __user *u_ioc, return NULL; /* copy into scratch area */ - ioc = kmalloc(tmp, GFP_KERNEL); - if (!ioc) - return ERR_PTR(-ENOMEM); - if (__copy_from_user(ioc, u_ioc, tmp)) { - kfree(ioc); - return ERR_PTR(-EFAULT); - } - return ioc; + return memdup_user(u_ioc, tmp); } static long
Use memdup_user() helper instead of open-coding to simplify the code. Signed-off-by: Geliang Tang <geliangtang@gmail.com> --- drivers/spi/spidev.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)