[PATCH] USB:bugfix a controller halt error

From: liulongfang
Date: Fri Jul 21 2023 - 06:02:24 EST


On systems that use ECC memory. The ECC error of the memory will
cause the USB controller to halt. It causes the usb_control_msg()
operation to fail.
At this point, the returned buffer data is an abnormal value, and
continuing to use it will lead to incorrect results.

Therefore, it is necessary to judge the return value and exit.

Signed-off-by: liulongfang <liulongfang@xxxxxxxxxx>
---
drivers/usb/core/hub.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index a739403a9e45..6a43198be263 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -4891,6 +4891,16 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
USB_DT_DEVICE << 8, 0,
buf, GET_DESCRIPTOR_BUFSIZE,
initial_descriptor_timeout);
+ /* On systems that use ECC memory, ECC errors can
+ * cause the USB controller to halt.
+ * It causes this operation to fail. At this time,
+ * the buf data is an abnormal value and needs to be exited.
+ */
+ if (r < 0) {
+ kfree(buf);
+ goto fail;
+ }
+
switch (buf->bMaxPacketSize0) {
case 8: case 16: case 32: case 64: case 255:
if (buf->bDescriptorType ==
--
2.24.0