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 Laurent,

Sorry about the delay, I forgot about this. :/

On Mon, Oct 30, 2017 at 09:59:34PM +0100, Laurent Caumont wrote:
> Hi Sean,
> 
> I found the problem. The read buffer needs to be allocated with kmalloc too.
> 
> int dibusb_read_eeprom_byte(struct dvb_usb_device *d, u8 offs, u8 *val)
> {
>           u8 *wbuf;
>           u8 *rbuf;
>           int rc;
> 
>           rbuf = kmalloc(1, GFP_KERNEL);
>           if (!rbuf)
>             return -ENOMEM;
> 
>           wbuf = kmalloc(1, GFP_KERNEL);
>           if (!wbuf)
>             return -ENOMEM;
> 
>          *wbuf = offs;
> 
>          rc = dibusb_i2c_msg(d, 0x50, wbuf, 1, rbuf, 1);
>          kfree(wbuf);
>          *val = *rbuf;
>          kfree(rbuf);
> 
>         return rc;
> }

Looks good. Would you mind sending either a Signed-off-by: or submit it
as a patch?

Thanks
Sean

> 
> It works now.
> Please update the code in the main branch for futur versions.
> Thanks.
> Regards,
> Laurent
> 
> 2017-10-29 20:31 GMT+01:00 Sean Young <sean@xxxxxxxx>:
> > On Sun, Oct 29, 2017 at 06:54:28PM +0100, Laurent Caumont wrote:
> >> Hi Sean,
> >>
> >> I recompiled the modules by following the
> >> https://www.linuxtv.org/wiki/index.php/How_to_Obtain,_Build_and_Install_V4L-DVB_Device_Drivers
> >> page and applied the patch.
> >> But I still have problems (see below). It doesn't seem to be the same callstack.
> >> Is it the right way to get the fix ?
> >
> > Yes, it's the right way to get the fix. However, you've hit a new problem
> > of a similar making. Please can you try with this patch as well:
> >
> > Thanks
> > Sean
> > ---
> > From 84efb0bf72ae5d9183f25d69d95fb9ad9b9bc644 Mon Sep 17 00:00:00 2001
> > From: Sean Young <sean@xxxxxxxx>
> > Date: Sun, 29 Oct 2017 19:28:32 +0000
> > Subject: [PATCH] media: dibusb: don't do DMA on stack
> >
> > The USB control messages require DMA to work. We cannot pass
> > a stack-allocated buffer, as it is not warranted that the
> > stack would be into a DMA enabled area.
> >
> > Signed-off-by: Sean Young <sean@xxxxxxxx>
> > ---
> >  drivers/media/usb/dvb-usb/dibusb-common.c | 14 ++++++++++++--
> >  1 file changed, 12 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..18c6e454b1b7 100644
> > --- a/drivers/media/usb/dvb-usb/dibusb-common.c
> > +++ b/drivers/media/usb/dvb-usb/dibusb-common.c
> > @@ -223,8 +223,18 @@ 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 *wbuf;
> > +       int rc;
> > +
> > +       wbuf = kmalloc(1, GFP_KERNEL);
> > +       if (!wbuf)
> > +               return -ENOMEM;
> > +
> > +       *wbuf = offs;
> > +       rc = dibusb_i2c_msg(d, 0x50, wbuf, 1, val, 1);
> > +       kfree(wbuf);
> > +
> > +       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