On Fri, 22 Sep 2017, Dan Carpenter wrote: > There used to be an integer overflow check in proc_do_submiturb() but > we removed it. It turns out that it's still required. The > uurb->buffer_length variable is a signed integer and it's controlled by > the user. It can lead to an integer overflow when we do: > > num_sgs = DIV_ROUND_UP(uurb->buffer_length, USB_SG_SIZE); > > If we strip away the macro then that line looks like this: > > num_sgs = (uurb->buffer_length + USB_SG_SIZE - 1) / USB_SG_SIZE; > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > It's the first addition which can overflow. > > Fixes: 1129d270cbfb ("USB: Increase usbfs transfer limit") > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > --- > v2: Cast the ->buffer_length to unsigned int which is more readable than > relying on type promotion. For both 1/2 and 2/2: Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html