Re: 'LITE-ON USB2.0 DVB-T Tune' driver crash with kernel 4.13 / ubuntu 17.10

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sean,

Thank you for the changes, It's better like this, I will test it.
Don't you think that a much better way would be to make the kalloc
directly inside dvb_usb_generic_rw instead of changing each call of
it? Are you sure there are no other mistake somewhere else ?

Laurent

2017-11-11 21:55 GMT+01:00 Sean Young <sean@xxxxxxxx>:
> Hi Laurant,
>
> On Sat, Nov 11, 2017 at 08:06:38PM +0100, Laurent Caumont wrote:
>> Hi Sean,
>>
>> I hope this one will be okay.
>
> There is a memory leak in there, and there is no reason to have to kmallocs
> for this function. Please would you mind testing this version?
>
> Please note that there were other issues like whitespace which I've fixed
> up.
>
> Thanks,
> Sean
> ----
> From 8362bc3e95016944b173c3866c103fcbc2587b6d Mon Sep 17 00:00:00 2001
> From: Laurent Caumont <lcaumont2@xxxxxxxxx>
> Date: Sat, 11 Nov 2017 18:44:46 +0100
> Subject: [PATCH] media: dvb: i2c transfers over usb cannot be done from stack
>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Laurent Caumont <lcaumont2@xxxxxxxxx>
> Signed-off-by: Sean Young <sean@xxxxxxxx>
> ---
>  drivers/media/usb/dvb-usb/dibusb-common.c | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/usb/dvb-usb/dibusb-common.c b/drivers/media/usb/dvb-usb/dibusb-common.c
> index 8207e6900656..bcacb0f22028 100644
> --- a/drivers/media/usb/dvb-usb/dibusb-common.c
> +++ b/drivers/media/usb/dvb-usb/dibusb-common.c
> @@ -223,8 +223,20 @@ EXPORT_SYMBOL(dibusb_i2c_algo);
>
>  int dibusb_read_eeprom_byte(struct dvb_usb_device *d, u8 offs, u8 *val)
>  {
> -       u8 wbuf[1] = { offs };
> -       return dibusb_i2c_msg(d, 0x50, wbuf, 1, val, 1);
> +       u8 *buf;
> +       int rc;
> +
> +       buf = kmalloc(2, GFP_KERNEL);
> +       if (!buf)
> +               return -ENOMEM;
> +
> +       buf[0] = offs;
> +
> +       rc = dibusb_i2c_msg(d, 0x50, &buf[0], 1, &buf[1], 1);
> +       *val = buf[1];
> +       kfree(buf);
> +
> +       return rc;
>  }
>  EXPORT_SYMBOL(dibusb_read_eeprom_byte);
>
> --
> 2.13.6
>



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux