Input: ims-pcu - sanity check against missing interfaces
authorOliver Neukum <oneukum@suse.com>
Thu, 17 Mar 2016 21:00:17 +0000 (14:00 -0700)
committerWilly Tarreau <w@1wt.eu>
Tue, 7 Jun 2016 08:42:47 +0000 (10:42 +0200)
commit a0ad220c96692eda76b2e3fd7279f3dcd1d8a8ff upstream.

A malicious device missing interface can make the driver oops.
Add sanity checking.

Signed-off-by: Oliver Neukum <ONeukum@suse.com>
CC: stable@vger.kernel.org
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Willy Tarreau <w@1wt.eu>
drivers/input/misc/ims-pcu.c

index e204f26b0011ae0f5ecfff4e6c28cd8e32481806..77164dc1bedd171b9662178626e4f67b613d5881 100644 (file)
@@ -1433,6 +1433,8 @@ static int ims_pcu_parse_cdc_data(struct usb_interface *intf, struct ims_pcu *pc
 
        pcu->ctrl_intf = usb_ifnum_to_if(pcu->udev,
                                         union_desc->bMasterInterface0);
+       if (!pcu->ctrl_intf)
+               return -EINVAL;
 
        alt = pcu->ctrl_intf->cur_altsetting;
        pcu->ep_ctrl = &alt->endpoint[0].desc;
@@ -1440,6 +1442,8 @@ static int ims_pcu_parse_cdc_data(struct usb_interface *intf, struct ims_pcu *pc
 
        pcu->data_intf = usb_ifnum_to_if(pcu->udev,
                                         union_desc->bSlaveInterface0);
+       if (!pcu->data_intf)
+               return -EINVAL;
 
        alt = pcu->data_intf->cur_altsetting;
        if (alt->desc.bNumEndpoints != 2) {