Skip to content

Commit 6aa61c1

Browse files
committed
Merge tag 'usb-5.17-final' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB fixes from Greg KH: "Here are some small remaining USB fixes for 5.17-final. They include: - two USB gadget driver fixes for reported problems - usbtmc driver fix for syzbot found issues - musb patch partial revert to resolve a reported regression. All of these have been in linux-next this week with no reported problems" * tag 'usb-5.17-final' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: usb: gadget: Fix use-after-free bug by not setting udc->dev.driver usb: usbtmc: Fix bug in pipe direction for control transfers partially Revert "usb: musb: Set the DT node on the child device" usb: gadget: rndis: prevent integer overflow in rndis_set_response()
2 parents 34e047a + 16b1941 commit 6aa61c1

4 files changed

Lines changed: 11 additions & 7 deletions

File tree

drivers/usb/class/usbtmc.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,6 +1919,7 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data,
19191919
struct usbtmc_ctrlrequest request;
19201920
u8 *buffer = NULL;
19211921
int rv;
1922+
unsigned int is_in, pipe;
19221923
unsigned long res;
19231924

19241925
res = copy_from_user(&request, arg, sizeof(struct usbtmc_ctrlrequest));
@@ -1928,12 +1929,14 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data,
19281929
if (request.req.wLength > USBTMC_BUFSIZE)
19291930
return -EMSGSIZE;
19301931

1932+
is_in = request.req.bRequestType & USB_DIR_IN;
1933+
19311934
if (request.req.wLength) {
19321935
buffer = kmalloc(request.req.wLength, GFP_KERNEL);
19331936
if (!buffer)
19341937
return -ENOMEM;
19351938

1936-
if ((request.req.bRequestType & USB_DIR_IN) == 0) {
1939+
if (!is_in) {
19371940
/* Send control data to device */
19381941
res = copy_from_user(buffer, request.data,
19391942
request.req.wLength);
@@ -1944,8 +1947,12 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data,
19441947
}
19451948
}
19461949

1950+
if (is_in)
1951+
pipe = usb_rcvctrlpipe(data->usb_dev, 0);
1952+
else
1953+
pipe = usb_sndctrlpipe(data->usb_dev, 0);
19471954
rv = usb_control_msg(data->usb_dev,
1948-
usb_rcvctrlpipe(data->usb_dev, 0),
1955+
pipe,
19491956
request.req.bRequest,
19501957
request.req.bRequestType,
19511958
request.req.wValue,
@@ -1957,7 +1964,7 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data,
19571964
goto exit;
19581965
}
19591966

1960-
if (rv && (request.req.bRequestType & USB_DIR_IN)) {
1967+
if (rv && is_in) {
19611968
/* Read control data from device */
19621969
res = copy_to_user(request.data, buffer, rv);
19631970
if (res)

drivers/usb/gadget/function/rndis.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,7 @@ static int rndis_set_response(struct rndis_params *params,
640640
BufLength = le32_to_cpu(buf->InformationBufferLength);
641641
BufOffset = le32_to_cpu(buf->InformationBufferOffset);
642642
if ((BufLength > RNDIS_MAX_TOTAL_SIZE) ||
643+
(BufOffset > RNDIS_MAX_TOTAL_SIZE) ||
643644
(BufOffset + 8 >= RNDIS_MAX_TOTAL_SIZE))
644645
return -EINVAL;
645646

drivers/usb/gadget/udc/core.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,7 +1436,6 @@ static void usb_gadget_remove_driver(struct usb_udc *udc)
14361436
usb_gadget_udc_stop(udc);
14371437

14381438
udc->driver = NULL;
1439-
udc->dev.driver = NULL;
14401439
udc->gadget->dev.driver = NULL;
14411440
}
14421441

@@ -1498,7 +1497,6 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
14981497
driver->function);
14991498

15001499
udc->driver = driver;
1501-
udc->dev.driver = &driver->driver;
15021500
udc->gadget->dev.driver = &driver->driver;
15031501

15041502
usb_gadget_udc_set_speed(udc, driver->max_speed);
@@ -1521,7 +1519,6 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
15211519
dev_err(&udc->dev, "failed to start %s: %d\n",
15221520
udc->driver->function, ret);
15231521
udc->driver = NULL;
1524-
udc->dev.driver = NULL;
15251522
udc->gadget->dev.driver = NULL;
15261523
return ret;
15271524
}

drivers/usb/musb/omap2430.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,6 @@ static int omap2430_probe(struct platform_device *pdev)
327327
musb->dev.parent = &pdev->dev;
328328
musb->dev.dma_mask = &omap2430_dmamask;
329329
musb->dev.coherent_dma_mask = omap2430_dmamask;
330-
device_set_of_node_from_dev(&musb->dev, &pdev->dev);
331330

332331
glue->dev = &pdev->dev;
333332
glue->musb = musb;

0 commit comments

Comments
 (0)