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

Subject: media: m920x: don't use stack on USB reads
Author:  Mauro Carvalho Chehab <[email protected]>
Date:    Mon Dec 6 15:34:19 2021 +0100

Using stack-allocated pointers for USB message data don't work.
This driver is almost OK with that, except for the I2C read
logic.

Fix it by using a temporary read buffer, just like on all other
calls to m920x_read().

Link: https://lore.kernel.org/all/[email protected]/
Reported-by: [email protected]
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 drivers/media/usb/dvb-usb/m920x.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/usb/dvb-usb/m920x.c 
b/drivers/media/usb/dvb-usb/m920x.c
index 4bb5b82599a7..691e05833db1 100644
--- a/drivers/media/usb/dvb-usb/m920x.c
+++ b/drivers/media/usb/dvb-usb/m920x.c
@@ -274,6 +274,13 @@ static int m920x_i2c_xfer(struct i2c_adapter *adap, struct 
i2c_msg msg[], int nu
                        /* Should check for ack here, if we knew how. */
                }
                if (msg[i].flags & I2C_M_RD) {
+                       char *read = kmalloc(1, GFP_KERNEL);
+                       if (!read) {
+                               ret = -ENOMEM;
+                               kfree(read);
+                               goto unlock;
+                       }
+
                        for (j = 0; j < msg[i].len; j++) {
                                /* Last byte of transaction?
                                 * Send STOP, otherwise send ACK. */
@@ -281,9 +288,12 @@ static int m920x_i2c_xfer(struct i2c_adapter *adap, struct 
i2c_msg msg[], int nu
 
                                if ((ret = m920x_read(d->udev, M9206_I2C, 0x0,
                                                      0x20 | stop,
-                                                     &msg[i].buf[j], 1)) != 0)
+                                                     read, 1)) != 0)
                                        goto unlock;
+                               msg[i].buf[j] = read[0];
                        }
+
+                       kfree(read);
                } else {
                        for (j = 0; j < msg[i].len; j++) {
                                /* Last byte of transaction? Then send STOP. */

_______________________________________________
linuxtv-commits mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to