Re: [PATCH v2] usb: devio: Add ioctl to disallow detaching kernel USB drivers.
From: Alan Stern
Date: Mon Jan 25 2016 - 10:47:20 EST
On Mon, 25 Jan 2016, BjÃrn Mork wrote:
> Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> writes:
> > On Mon, 25 Jan 2016, BjÃrn Mork wrote:
> >
> >> I don't feel much like an expert here, but I can certainly make up an
> >> opinion anyway :)
> >>
> >> Since 64bits kernels allow usb devio with interface numbers up to 63, I
> >> guess you need __u64 to avoid limiting the range? Limiting will create
> >> all sorts of followup problems, so it's definitely easiest to just go
> >> with __u64.
> >
> > But the Linux USB stack only allows up to 32 interfaces (see
> > include/linux/usb.h):
> >
> > /* this maximum is arbitrary */
> > #define USB_MAXINTERFACES 32
>
>
> Ah, I totally missed that. Thanks
>
>
> > So there's no point using a 64-bit value.
> >
> > On the other hand, this value is supposed to be the same size as
> > ps->ifclaimed, which is used as an argument to clear_bit(), set_bit(),
> > and test_bit(). Those routines require unsigned long.
>
> Maybe the input to these should be clamped to USB_MAXINTERFACES?
If you want. Right now it's clamped to 8 * sizeof(ps->ifclaimed),
which ought to be good enough.
Oh yes, there's one other thing to notice. The value passed to these
routines is an interface number (as opposed to an index). According to
the USB spec, interfaces are supposed to be numbered sequentially
starting from 0, but there may be some devices that mess this up. So
it's possible we'll see an interface number which is larger than the
number of interfaces! :-)
Alan Stern