Commit a2836d3f authored by Chen Ni's avatar Chen Ni Committed by Mauro Carvalho Chehab
Browse files

media: lmedm04: Handle errors for lme2510_int_read



Add check for the return value of usb_pipe_endpoint() and
usb_submit_urb() in order to catch the errors.

Fixes: 15e1ce33 ("[media] lmedm04: Fix usb_submit_urb BOGUS urb xfer, pipe 1 != type 3 in interrupt urb")
Signed-off-by: default avatarChen Ni <nichen@iscas.ac.cn>
Link: https://lore.kernel.org/r/20240521091042.1769684-1-nichen@iscas.ac.cn


Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent a7f5b36b
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -373,6 +373,7 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap)
	struct dvb_usb_device *d = adap_to_d(adap);
	struct lme2510_state *lme_int = adap_to_priv(adap);
	struct usb_host_endpoint *ep;
	int ret;

	lme_int->lme_urb = usb_alloc_urb(0, GFP_KERNEL);

@@ -390,11 +391,20 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap)

	/* Quirk of pipe reporting PIPE_BULK but behaves as interrupt */
	ep = usb_pipe_endpoint(d->udev, lme_int->lme_urb->pipe);
	if (!ep) {
		usb_free_urb(lme_int->lme_urb);
		return -ENODEV;
	}

	if (usb_endpoint_type(&ep->desc) == USB_ENDPOINT_XFER_BULK)
		lme_int->lme_urb->pipe = usb_rcvbulkpipe(d->udev, 0xa);

	usb_submit_urb(lme_int->lme_urb, GFP_KERNEL);
	ret = usb_submit_urb(lme_int->lme_urb, GFP_KERNEL);
	if (ret) {
		usb_free_urb(lme_int->lme_urb);
		return ret;
	}

	info("INT Interrupt Service Started");

	return 0;