Emilio López <emilio.lopez@xxxxxxxxxxxxxxx> writes: > diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c > index 38ae877c..bf40aa6 100644 > --- a/drivers/usb/core/devio.c > +++ b/drivers/usb/core/devio.c > @@ -77,6 +77,8 @@ struct usb_dev_state { > unsigned long ifclaimed; > u32 secid; > u32 disabled_bulk_eps; > + bool privileges_dropped; > + unsigned long interface_allowed_mask; > }; > > struct async { > @@ -641,6 +643,14 @@ static int claimintf(struct usb_dev_state *ps, unsigned int ifnum) > if (test_bit(ifnum, &ps->ifclaimed)) > return 0; > > + if (ps->privileges_dropped) { > + if (ifnum >= 8*sizeof(ps->interface_allowed_mask)) > + return -EINVAL; I don't think you need this runtime test. You can just make sure that sizeof(ps->interface_allowed_mask) == sizeof(ps->ifclaimed) at build time. I do find this variable and arbitrary limit a bit confusing, but that's not your fault - I guess it is an indication that ifnums > 31 are rare :) > diff --git a/include/uapi/linux/usbdevice_fs.h b/include/uapi/linux/usbdevice_fs.h > index 019ba1e..9abcb34 100644 > --- a/include/uapi/linux/usbdevice_fs.h > +++ b/include/uapi/linux/usbdevice_fs.h > @@ -154,6 +154,10 @@ struct usbdevfs_streams { > unsigned char eps[0]; > }; > > +struct usbdevfs_drop_privs { > + unsigned long interface_allowed_mask; > +}; > + "unsigned long" isn't a very good choice here, is it? Bjørn -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html