Greg KH <[EMAIL PROTECTED]> wrote:
>
> On Thu, Jun 01, 2006 at 08:48:46PM -0700, [EMAIL PROTECTED] wrote:
> > 
> > From: Philippe Retornaz <[EMAIL PROTECTED]>
> > 
> > See http://bugzilla.kernel.org/show_bug.cgi?id=6617.
> > 
> > This function dereference a __user pointer.
> > 
> > (akpm: this code is deeply fishy.  Are the types correct?)
> > 
> > Signed-off-by: Philippe Retornaz <[EMAIL PROTECTED]>
> > Cc: Greg KH <[EMAIL PROTECTED]>
> > Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
> > ---
> > 
> >  drivers/usb/core/devio.c |    4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff -puN 
> > drivers/usb/core/devio.c~drivers-usb-core-devioc-dereference-userspace-pointer
> >  drivers/usb/core/devio.c
> > --- 
> > devel/drivers/usb/core/devio.c~drivers-usb-core-devioc-dereference-userspace-pointer
> >     2006-06-01 20:48:09.000000000 -0700
> > +++ devel-akpm/drivers/usb/core/devio.c     2006-06-01 20:48:09.000000000 
> > -0700
> > @@ -1079,7 +1079,9 @@ static int proc_submiturb(struct dev_sta
> >     if (copy_from_user(&uurb, arg, sizeof(uurb)))
> >             return -EFAULT;
> >  
> > -   return proc_do_submiturb(ps, &uurb, (((struct usbdevfs_urb __user 
> > *)arg)->iso_frame_desc), arg);
> > +   return proc_do_submiturb(ps, &uurb,
> > +           (struct usbdevfs_iso_packet_desc __user *)uurb.iso_frame_desc,
> > +           arg);
> >  }
> 
> This doesn't do anything, or solve any problem, so I'm going to drop it.
> 

Are you sure?  `arg' is a userspace pointer and this:

        proc_do_submiturb(ps, &uurb, (((struct usbdevfs_urb __user 
*)arg)->iso_frame_desc), arg);

directly dereferences it, whereas this:


        (struct usbdevfs_iso_packet_desc __user *)uurb.iso_frame_desc,

instead uses the copy which we obtained via copy_from_user.

I think?


_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to