lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 138/239] media: m920x: dont use stack on USB reads
    Date
    From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

    [ Upstream commit a2ab06d7c4d6bfd0b545a768247a70463e977e27 ]

    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/ccc99e48-de4f-045e-0fe4-61e3118e3f74@mida.se/
    Reported-by: rkardell@mida.se
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    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 22554d9abd432..3b2a0f36fc38e 100644
    --- a/drivers/media/usb/dvb-usb/m920x.c
    +++ b/drivers/media/usb/dvb-usb/m920x.c
    @@ -277,6 +277,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. */
    @@ -284,9 +291,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. */
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 20:33    [W:2.143 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site