This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: drivers/media/dvb-core: copy user arrays safely
Author:  Philipp Stanner <pstan...@redhat.com>
Date:    Thu Nov 2 20:16:34 2023 +0100

At several positions in dvb_frontend.c, memdup_user() is utilized to
copy userspace arrays. This is done without overflow checks.

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

Link: 
https://lore.kernel.org/linux-media/20231102191633.52592-2-pstan...@redhat.com
Suggested-by: Dave Airlie <airl...@redhat.com>
Signed-off-by: Philipp Stanner <pstan...@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mche...@kernel.org>

 drivers/media/dvb-core/dvb_frontend.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

---

diff --git a/drivers/media/dvb-core/dvb_frontend.c 
b/drivers/media/dvb-core/dvb_frontend.c
index 9293b058ab99..93d3378a0df4 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -2168,7 +2168,8 @@ static int dvb_frontend_handle_compat_ioctl(struct file 
*file, unsigned int cmd,
                if (!tvps->num || (tvps->num > DTV_IOCTL_MAX_MSGS))
                        return -EINVAL;
 
-               tvp = memdup_user(compat_ptr(tvps->props), tvps->num * 
sizeof(*tvp));
+               tvp = memdup_array_user(compat_ptr(tvps->props),
+                                       tvps->num, sizeof(*tvp));
                if (IS_ERR(tvp))
                        return PTR_ERR(tvp);
 
@@ -2199,7 +2200,8 @@ static int dvb_frontend_handle_compat_ioctl(struct file 
*file, unsigned int cmd,
                if (!tvps->num || (tvps->num > DTV_IOCTL_MAX_MSGS))
                        return -EINVAL;
 
-               tvp = memdup_user(compat_ptr(tvps->props), tvps->num * 
sizeof(*tvp));
+               tvp = memdup_array_user(compat_ptr(tvps->props),
+                                       tvps->num, sizeof(*tvp));
                if (IS_ERR(tvp))
                        return PTR_ERR(tvp);
 
@@ -2379,7 +2381,8 @@ static int dvb_get_property(struct dvb_frontend *fe, 
struct file *file,
        if (!tvps->num || tvps->num > DTV_IOCTL_MAX_MSGS)
                return -EINVAL;
 
-       tvp = memdup_user((void __user *)tvps->props, tvps->num * sizeof(*tvp));
+       tvp = memdup_array_user((void __user *)tvps->props,
+                               tvps->num, sizeof(*tvp));
        if (IS_ERR(tvp))
                return PTR_ERR(tvp);
 
@@ -2457,7 +2460,8 @@ static int dvb_frontend_handle_ioctl(struct file *file,
                if (!tvps->num || (tvps->num > DTV_IOCTL_MAX_MSGS))
                        return -EINVAL;
 
-               tvp = memdup_user((void __user *)tvps->props, tvps->num * 
sizeof(*tvp));
+               tvp = memdup_array_user((void __user *)tvps->props,
+                                       tvps->num, sizeof(*tvp));
                if (IS_ERR(tvp))
                        return PTR_ERR(tvp);
 

Reply via email to