diff options
Diffstat (limited to 'sound/isa/wavefront/wavefront_fx.c')
| -rw-r--r-- | sound/isa/wavefront/wavefront_fx.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/sound/isa/wavefront/wavefront_fx.c b/sound/isa/wavefront/wavefront_fx.c index a4345fc0756..b77883c7ee7 100644 --- a/sound/isa/wavefront/wavefront_fx.c +++ b/sound/isa/wavefront/wavefront_fx.c @@ -20,6 +20,8 @@ #include <linux/init.h> #include <linux/time.h> #include <linux/wait.h> +#include <linux/slab.h> +#include <linux/module.h> #include <linux/firmware.h> #include <sound/core.h> #include <sound/snd_wavefront.h> @@ -202,15 +204,11 @@ snd_wavefront_fx_ioctl (struct snd_hwdep *sdev, struct file *file, "> 512 bytes to FX\n"); return -EIO; } - page_data = kmalloc(r.data[2] * sizeof(short), GFP_KERNEL); - if (!page_data) - return -ENOMEM; - if (copy_from_user (page_data, - (unsigned char __user *) r.data[3], - r.data[2] * sizeof(short))) { - kfree(page_data); - return -EFAULT; - } + page_data = memdup_user((unsigned char __user *) + r.data[3], + r.data[2] * sizeof(short)); + if (IS_ERR(page_data)) + return PTR_ERR(page_data); pd = page_data; } @@ -242,7 +240,7 @@ snd_wavefront_fx_ioctl (struct snd_hwdep *sdev, struct file *file, that outputs it. */ -int __devinit +int snd_wavefront_fx_start (snd_wavefront_t *dev) { unsigned int i; |
