lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <YhXrCm5ig-YWPY2OVkmdPl48N1Td6K8qJJ5cW7OtIMQt9ENXrexATCgeXCmuG5Mq1wIDxyhaLZhZeuW15lgKhKEKKLfU3GwjMMhKP1Awyj4=@protonmail.com>
Date: Fri, 17 Oct 2025 20:47:58 +0000
From: Naüm Jumpertz <n.jumpertz@...tonmail.com>
To: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Cc: "linux-usb@...r.kernel.org" <linux-usb@...r.kernel.org>, "gregkh@...uxfoundation.org" <gregkh@...uxfoundation.org>
Subject: Oppo/Oneplus phones and usb3.0 incompatibility

Hi all,

Because of wrong device descriptor, certain oppo/oneplus phones, 
like my oppo find x5, can't connect to linux computers using usb3 cables,
the issue is also on other oppo/oneplus phones such as oneplus 9 pro, 
starting from OxygenOs 13 in december 2022 
link: https://xdaforums.com/t/connection-problems-to-a-computer-with-linux.4642402/
The issue is present in kernel 6.17 but also in older versions.
The connection correctly works using an usb2 cable.

The phone is detected as a USB SuperSpeed device but the device descriptor flag given is USB 2.0,
so, according to dmesg, the kernel warm reset the phone and don't manage to establishes the connection, which is annoying:

[ 3537.701845] usb 2-2: new SuperSpeed USB device number 4 using xhci_hcd
[ 3537.722594] usb 2-2: got a wrong device descriptor, warm reset device
[ 3538.105960] usb 2-2: new SuperSpeed USB device number 5 using xhci_hcd
[ 3538.126933] usb 2-2: got a wrong device descriptor, warm reset device
[ 3538.313826] usb usb2-port2: attempt power cycle
[ 3539.241985] usb 2-2: new SuperSpeed USB device number 6 using xhci_hcd
[ 3539.262410] usb 2-2: got a wrong device descriptor, warm reset device
[ 3539.646017] usb 2-2: new SuperSpeed USB device number 7 using xhci_hcd
[ 3539.666993] usb 2-2: got a wrong device descriptor, warm reset device
[ 3539.853713] usb usb2-port2: unable to enumerate USB device

The issue is due to oppo phones not being conformant to usb standard.
Maybe the kernel should still establish the connection if warm resets fail, by counting fails or something,
otherwise oppo phones will never manage to connect through usb3.0 cables, until oppo fixes it.

I'm not a dev, so my solution was just to disable the feature:
---
 drivers/usb/core/hub.c | 14 --------------
 1 file changed, 14 deletions(-)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 256fe8c86828..be28296b39de 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -5186,20 +5186,6 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
 		*dev_descr = *descr;
 	kfree(descr);
 
-	/*
-	 * Some superspeed devices have finished the link training process
-	 * and attached to a superspeed hub port, but the device descriptor
-	 * got from those devices show they aren't superspeed devices. Warm
-	 * reset the port attached by the devices can fix them.
-	 */
-	if ((udev->speed >= USB_SPEED_SUPER) &&
-			(le16_to_cpu(udev->descriptor.bcdUSB) < 0x0300)) {
-		dev_err(&udev->dev, "got a wrong device descriptor, warm reset device\n");
-		hub_port_reset(hub, port1, udev, HUB_BH_RESET_TIME, true);
-		retval = -EINVAL;
-		goto fail;
-	}
-
 	usb_detect_quirks(udev);
 
 	if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) {
-- 
2.51.0



Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ