ALSA: wavefront: copy userspace array safely
authorPhilipp Stanner <pstanner@redhat.com>
Thu, 2 Nov 2023 19:03:10 +0000 (20:03 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 20 Nov 2023 11:38:31 +0000 (12:38 +0100)
wavefront_fx.c utilizes memdup_user() to copy a userspace array. This
does not check for an overflow.

Use the new wrapper memdup_array_user() to copy the array more safely.

Suggested-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Philipp Stanner <pstanner@redhat.com>
Link: https://lore.kernel.org/r/20231102190309.50891-2-pstanner@redhat.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/isa/wavefront/wavefront_fx.c

index 3c21324b2a0e3b14266773c64e2c25b44476a626..0273b7dfaf1252a44f02028504c738c3a801428e 100644 (file)
@@ -191,9 +191,9 @@ snd_wavefront_fx_ioctl (struct snd_hwdep *sdev, struct file *file,
                                            "> 512 bytes to FX\n");
                                return -EIO;
                        }
-                       page_data = memdup_user((unsigned char __user *)
-                                               r.data[3],
-                                               r.data[2] * sizeof(short));
+                       page_data = memdup_array_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;