|
Takashi Iwai |
c6798e |
From 7f14c7227f342d9932f9b918893c8814f86d2a0d Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
c6798e |
From: Szymon Heidrich <szymon.heidrich@gmail.com>
|
|
Takashi Iwai |
c6798e |
Date: Mon, 21 Feb 2022 13:24:56 +0100
|
|
Takashi Iwai |
c6798e |
Subject: [PATCH] USB: gadget: validate endpoint index for xilinx udc
|
|
Takashi Iwai |
c6798e |
Git-commit: 7f14c7227f342d9932f9b918893c8814f86d2a0d
|
|
Takashi Iwai |
c6798e |
Patch-mainline: v5.17-rc6
|
|
Takashi Iwai |
fd3b6e |
References: CVE-2022-27223 bsc#1197245 git-fixes
|
|
Takashi Iwai |
c6798e |
|
|
Takashi Iwai |
c6798e |
Assure that host may not manipulate the index to point
|
|
Takashi Iwai |
c6798e |
past endpoint array.
|
|
Takashi Iwai |
c6798e |
|
|
Takashi Iwai |
c6798e |
Signed-off-by: Szymon Heidrich <szymon.heidrich@gmail.com>
|
|
Takashi Iwai |
c6798e |
Cc: stable <stable@kernel.org>
|
|
Takashi Iwai |
c6798e |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Takashi Iwai |
c6798e |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
c6798e |
|
|
Takashi Iwai |
c6798e |
---
|
|
Takashi Iwai |
c6798e |
drivers/usb/gadget/udc/udc-xilinx.c | 6 ++++++
|
|
Takashi Iwai |
c6798e |
1 file changed, 6 insertions(+)
|
|
Takashi Iwai |
c6798e |
|
|
Takashi Iwai |
c6798e |
diff --git a/drivers/usb/gadget/udc/udc-xilinx.c b/drivers/usb/gadget/udc/udc-xilinx.c
|
|
Takashi Iwai |
c6798e |
index 6ce886fb7bfe..2907fad04e2c 100644
|
|
Takashi Iwai |
c6798e |
--- a/drivers/usb/gadget/udc/udc-xilinx.c
|
|
Takashi Iwai |
c6798e |
+++ b/drivers/usb/gadget/udc/udc-xilinx.c
|
|
Takashi Iwai |
c6798e |
@@ -1615,6 +1615,8 @@ static void xudc_getstatus(struct xusb_udc *udc)
|
|
Takashi Iwai |
c6798e |
break;
|
|
Takashi Iwai |
c6798e |
case USB_RECIP_ENDPOINT:
|
|
Takashi Iwai |
c6798e |
epnum = udc->setup.wIndex & USB_ENDPOINT_NUMBER_MASK;
|
|
Takashi Iwai |
c6798e |
+ if (epnum >= XUSB_MAX_ENDPOINTS)
|
|
Takashi Iwai |
c6798e |
+ goto stall;
|
|
Takashi Iwai |
c6798e |
target_ep = &udc->ep[epnum];
|
|
Takashi Iwai |
c6798e |
epcfgreg = udc->read_fn(udc->addr + target_ep->offset);
|
|
Takashi Iwai |
c6798e |
halt = epcfgreg & XUSB_EP_CFG_STALL_MASK;
|
|
Takashi Iwai |
c6798e |
@@ -1682,6 +1684,10 @@ static void xudc_set_clear_feature(struct xusb_udc *udc)
|
|
Takashi Iwai |
c6798e |
case USB_RECIP_ENDPOINT:
|
|
Takashi Iwai |
c6798e |
if (!udc->setup.wValue) {
|
|
Takashi Iwai |
c6798e |
endpoint = udc->setup.wIndex & USB_ENDPOINT_NUMBER_MASK;
|
|
Takashi Iwai |
c6798e |
+ if (endpoint >= XUSB_MAX_ENDPOINTS) {
|
|
Takashi Iwai |
c6798e |
+ xudc_ep0_stall(udc);
|
|
Takashi Iwai |
c6798e |
+ return;
|
|
Takashi Iwai |
c6798e |
+ }
|
|
Takashi Iwai |
c6798e |
target_ep = &udc->ep[endpoint];
|
|
Takashi Iwai |
c6798e |
outinbit = udc->setup.wIndex & USB_ENDPOINT_DIR_MASK;
|
|
Takashi Iwai |
c6798e |
outinbit = outinbit >> 7;
|
|
Takashi Iwai |
c6798e |
--
|
|
Takashi Iwai |
c6798e |
2.31.1
|
|
Takashi Iwai |
c6798e |
|