From nobody Sun Nov 9 20:21:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1551952613831333.2322446527919; Thu, 7 Mar 2019 01:56:53 -0800 (PST) Received: from localhost ([127.0.0.1]:48308 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1plg-0006tx-P8 for importer@patchew.org; Thu, 07 Mar 2019 04:56:48 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35044) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1pjk-0005aK-Qs for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1pjk-0007si-0z for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:48 -0500 Received: from mx1.redhat.com ([209.132.183.28]:47450) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h1pjj-0007s9-NS for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:47 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 09488C05090A for ; Thu, 7 Mar 2019 09:54:47 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-211.ams2.redhat.com [10.36.116.211]) by smtp.corp.redhat.com (Postfix) with ESMTP id BC9A61001E68; Thu, 7 Mar 2019 09:54:42 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id EFD8417475; Thu, 7 Mar 2019 10:54:41 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Thu, 7 Mar 2019 10:54:38 +0100 Message-Id: <20190307095441.31921-2-kraxel@redhat.com> In-Reply-To: <20190307095441.31921-1-kraxel@redhat.com> References: <20190307095441.31921-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 07 Mar 2019 09:54:47 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 1/4] usb-mtp: return incomplete transfer on a lstat failure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bandan Das , Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Bandan Das MTP writes objects in small chunks and at the end gets the real file size to update the object metadata. If this fails for any reason, return an INCOMPLETE_TRANSFER to the initiator Spotted by Coverity: CID 1398651 Signed-off-by: Bandan Das Message-id: 20190306210409.14842-2-bsd@redhat.com Signed-off-by: Gerd Hoffmann --- hw/usb/dev-mtp.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c index 4ee4fc5a893a..4dde14fc7887 100644 --- a/hw/usb/dev-mtp.c +++ b/hw/usb/dev-mtp.c @@ -1591,14 +1591,18 @@ done: return ret; } =20 -static void usb_mtp_update_object(MTPObject *parent, char *name) +static int usb_mtp_update_object(MTPObject *parent, char *name) { + int ret =3D -1; + MTPObject *o =3D usb_mtp_object_lookup_name(parent, name, strlen(name)); =20 if (o) { - lstat(o->path, &o->stat); + ret =3D lstat(o->path, &o->stat); } + + return ret; } =20 static void usb_mtp_write_data(MTPState *s) @@ -1655,13 +1659,18 @@ static void usb_mtp_write_data(MTPState *s) if (d->write_status !=3D WRITE_END) { return; } else { - /* Only for < 4G file sizes */ - if (s->dataset.size !=3D 0xFFFFFFFF && d->offset !=3D s->datas= et.size) { + /* + * Return an incomplete transfer if file size doesn't match + * for < 4G file or if lstat fails which will result in an inc= orrect + * file size + */ + if ((s->dataset.size !=3D 0xFFFFFFFF && + d->offset !=3D s->dataset.size) || + usb_mtp_update_object(parent, s->dataset.filename)) { usb_mtp_queue_result(s, RES_INCOMPLETE_TRANSFER, d->trans, 0, 0, 0, 0); goto done; } - usb_mtp_update_object(parent, s->dataset.filename); } } =20 --=20 2.18.1 From nobody Sun Nov 9 20:21:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1551952718434696.2227903259708; Thu, 7 Mar 2019 01:58:38 -0800 (PST) Received: from localhost ([127.0.0.1]:48343 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1pnP-0000H0-HI for importer@patchew.org; Thu, 07 Mar 2019 04:58:35 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35062) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1pjl-0005aq-CN for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1pjk-0007tC-I8 for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:49 -0500 Received: from mx1.redhat.com ([209.132.183.28]:40564) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h1pjk-0007sW-88 for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:48 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8513386679 for ; Thu, 7 Mar 2019 09:54:47 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-211.ams2.redhat.com [10.36.116.211]) by smtp.corp.redhat.com (Postfix) with ESMTP id B4034611C0; Thu, 7 Mar 2019 09:54:42 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 040FB17476; Thu, 7 Mar 2019 10:54:42 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Thu, 7 Mar 2019 10:54:39 +0100 Message-Id: <20190307095441.31921-3-kraxel@redhat.com> In-Reply-To: <20190307095441.31921-1-kraxel@redhat.com> References: <20190307095441.31921-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Thu, 07 Mar 2019 09:54:47 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 2/4] usb-mtp: fix some usb_mtp_write_data return paths X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bandan Das , Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Bandan Das During a write, free up the "path" before getting more data. Also, while we at it, remove the confusing usage of d->fd for storing mkdir status Spotted by Coverity: CID 1398642 Signed-off-by: Bandan Das Message-id: 20190306210409.14842-3-bsd@redhat.com Signed-off-by: Gerd Hoffmann --- hw/usb/dev-mtp.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c index 4dde14fc7887..1f22284949df 100644 --- a/hw/usb/dev-mtp.c +++ b/hw/usb/dev-mtp.c @@ -1605,7 +1605,7 @@ static int usb_mtp_update_object(MTPObject *parent, c= har *name) return ret; } =20 -static void usb_mtp_write_data(MTPState *s) +static int usb_mtp_write_data(MTPState *s) { MTPData *d =3D s->data_out; MTPObject *parent =3D @@ -1613,6 +1613,7 @@ static void usb_mtp_write_data(MTPState *s) char *path =3D NULL; uint64_t rc; mode_t mask =3D 0644; + int ret =3D 0; =20 assert(d !=3D NULL); =20 @@ -1621,13 +1622,13 @@ static void usb_mtp_write_data(MTPState *s) if (!parent || !s->write_pending) { usb_mtp_queue_result(s, RES_INVALID_OBJECTINFO, d->trans, 0, 0, 0, 0); - return; + return 1; } =20 if (s->dataset.filename) { path =3D g_strdup_printf("%s/%s", parent->path, s->dataset.fil= ename); if (s->dataset.format =3D=3D FMT_ASSOCIATION) { - d->fd =3D mkdir(path, mask); + ret =3D mkdir(path, mask); goto free; } d->fd =3D open(path, O_CREAT | O_WRONLY | @@ -1657,7 +1658,8 @@ static void usb_mtp_write_data(MTPState *s) goto done; } if (d->write_status !=3D WRITE_END) { - return; + g_free(path); + return ret; } else { /* * Return an incomplete transfer if file size doesn't match @@ -1685,12 +1687,14 @@ done: */ if (d->fd !=3D -1) { close(d->fd); + d->fd =3D -1; } free: g_free(s->dataset.filename); s->dataset.size =3D 0; g_free(path); s->write_pending =3D false; + return ret; } =20 static void usb_mtp_write_metadata(MTPState *s, uint64_t dlen) @@ -1727,14 +1731,12 @@ static void usb_mtp_write_metadata(MTPState *s, uin= t64_t dlen) s->write_pending =3D true; =20 if (s->dataset.format =3D=3D FMT_ASSOCIATION) { - usb_mtp_write_data(s); - /* next_handle will be allocated to the newly created dir */ - if (d->fd =3D=3D -1) { + if (usb_mtp_write_data(s)) { + /* next_handle will be allocated to the newly created dir */ usb_mtp_queue_result(s, RES_STORE_FULL, d->trans, 0, 0, 0, 0); return; } - d->fd =3D -1; } =20 usb_mtp_queue_result(s, RES_OK, d->trans, 3, QEMU_STORAGE_ID, --=20 2.18.1 From nobody Sun Nov 9 20:21:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1551952609914276.7053890201016; Thu, 7 Mar 2019 01:56:49 -0800 (PST) Received: from localhost ([127.0.0.1]:48306 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1ple-0006t8-Tv for importer@patchew.org; Thu, 07 Mar 2019 04:56:46 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35046) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1pjk-0005aP-TL for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1pjk-0007sp-3E for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:48 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34906) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h1pjj-0007sB-QS for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:48 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0F0A47EBA7 for ; Thu, 7 Mar 2019 09:54:47 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-211.ams2.redhat.com [10.36.116.211]) by smtp.corp.redhat.com (Postfix) with ESMTP id BE6331001E69; Thu, 7 Mar 2019 09:54:42 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 0C3FC17514; Thu, 7 Mar 2019 10:54:42 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Thu, 7 Mar 2019 10:54:40 +0100 Message-Id: <20190307095441.31921-4-kraxel@redhat.com> In-Reply-To: <20190307095441.31921-1-kraxel@redhat.com> References: <20190307095441.31921-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Thu, 07 Mar 2019 09:54:47 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 3/4] usb-mtp: prevent null dereference while deleting objects X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bandan Das , Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Bandan Das Spotted by Coverity: CID 1399144 Signed-off-by: Bandan Das Message-id: 20190306210409.14842-4-bsd@redhat.com Signed-off-by: Gerd Hoffmann --- hw/usb/dev-mtp.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c index 1f22284949df..06e376bcd211 100644 --- a/hw/usb/dev-mtp.c +++ b/hw/usb/dev-mtp.c @@ -1177,9 +1177,7 @@ static int usb_mtp_deletefn(MTPState *s, MTPObject *o= , uint32_t trans) usb_mtp_object_free_one(s, o); success =3D true; } - } - - if (o->format =3D=3D FMT_ASSOCIATION) { + } else if (o->format =3D=3D FMT_ASSOCIATION) { if (rmdir(o->path)) { partial_delete =3D true; } else { --=20 2.18.1 From nobody Sun Nov 9 20:21:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1551952613124135.12293518956744; Thu, 7 Mar 2019 01:56:53 -0800 (PST) Received: from localhost ([127.0.0.1]:48310 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1pli-0006u3-1m for importer@patchew.org; Thu, 07 Mar 2019 04:56:50 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35029) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1pjk-0005aC-6U for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1pji-0007rv-Qx for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:48 -0500 Received: from mx1.redhat.com ([209.132.183.28]:36852) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h1pji-0007rG-Go for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:54:46 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B36E5A82C; Thu, 7 Mar 2019 09:54:45 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-211.ams2.redhat.com [10.36.116.211]) by smtp.corp.redhat.com (Postfix) with ESMTP id C46F5413B; Thu, 7 Mar 2019 09:54:42 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 1476517515; Thu, 7 Mar 2019 10:54:42 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Thu, 7 Mar 2019 10:54:41 +0100 Message-Id: <20190307095441.31921-5-kraxel@redhat.com> In-Reply-To: <20190307095441.31921-1-kraxel@redhat.com> References: <20190307095441.31921-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 07 Mar 2019 09:54:45 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 4/4] Introduce new "no_guest_reset" parameter for usb-host device X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Alexander Kappner , Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Alexander Kappner With certain USB devices passed through via usb-host, a guest attempting to reset a usb-host device can trigger a reset loop that renders the USB device unusable. In my use case, the device was an iPhone XR that was passed throu= gh to a Mac OS X Mojave guest. Upon connecting the device, the following happens: 1) Guest recognizes new device, sends reset to emulated USB host 2) QEMU's USB host sends reset to host kernel 3) Host kernel resets device 4) After reset, host kernel determines that some part of the device descrip= tor has changed ("device firmware changed" in dmesg), so host kernel decides to re-enumerate the device. 5) Re-enumeration causes QEMU to disconnect and reconnect the device in the guest. 6) goto 1) Here's from the host kernel (note the "device firmware changed" lines") [3677704.473050] usb 1-1.3: new high-speed USB device number 53 using ehci-= pci [3677704.555594] usb 1-1.3: New USB device found, idVendor=3D05ac, idProduc= t=3D12a8, bcdDevice=3D11.08 [3677704.555599] usb 1-1.3: New USB device strings: Mfr=3D1, Product=3D2, S= erialNumber=3D3 [3677704.555602] usb 1-1.3: Product: iPhone [3677704.555605] usb 1-1.3: Manufacturer: Apple Inc. [3677704.555607] usb 1-1.3: SerialNumber: [[removed]] [3677709.401040] usb 1-1.3: reset high-speed USB device number 53 using ehc= i-pci [3677709.479486] usb 1-1.3: device firmware changed [3677709.479842] usb 1-1.3: USB disconnect, device number 53 [3677709.546039] usb 1-1.3: new high-speed USB device number 54 using ehci-= pci [3677709.627471] usb 1-1.3: New USB device found, idVendor=3D05ac, idProduc= t=3D12a8, bcdDevice=3D11.08 [3677709.627476] usb 1-1.3: New USB device strings: Mfr=3D1, Product=3D2, S= erialNumber=3D3 [3677709.627479] usb 1-1.3: Product: iPhone [3677709.627481] usb 1-1.3: Manufacturer: Apple Inc. [3677709.627483] usb 1-1.3: SerialNumber: [[removed]] [3677762.320044] usb 1-1.3: reset high-speed USB device number 54 using ehc= i-pci [3677762.615630] usb 1-1.3: USB disconnect, device number 54 [3677762.787043] usb 1-1.3: new high-speed USB device number 55 using ehci-= pci [3677762.869016] usb 1-1.3: New USB device found, idVendor=3D05ac, idProduc= t=3D12a8, bcdDevice=3D11.08 [3677762.869024] usb 1-1.3: New USB device strings: Mfr=3D1, Product=3D2, S= erialNumber=3D3 [3677762.869028] usb 1-1.3: Product: iPhone [3677762.869032] usb 1-1.3: Manufacturer: Apple Inc. [3677762.869035] usb 1-1.3: SerialNumber: [[removed]] [3677815.662036] usb 1-1.3: reset high-speed USB device number 55 using ehc= i-pci Here's from QEMU: libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/= 005/022: No such file or directory libusb: error [udev_hotplug_event] ignoring udev action bind libusb: error [udev_hotplug_event] ignoring udev action bind libusb: error [_open_sysfs_attr] open /sys/bus/usb/devices/5-1/bConfigurati= onValue failed ret=3D-1 errno=3D2 libusb: error [_get_usbfs_fd] File doesn't exist, wait 10 ms and try again libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/= 005/024: No such file or directory libusb: error [udev_hotplug_event] ignoring udev action bind libusb: error [udev_hotplug_event] ignoring udev action bind libusb: error [_open_sysfs_attr] open /sys/bus/usb/devices/5-1/bConfigurati= onValue failed ret=3D-1 errno=3D2 libusb: error [_get_usbfs_fd] File doesn't exist, wait 10 ms and try again libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/= 005/026: No such file or directory The result of this is that the device remains permanently unusable in the g= uest. The same problem has been previously reported for an iPad: https://stackoverflow.com/questions/52617634/how-do-i-get-qemu-usb-passthro= ugh-to-work-for-ipad-iphone This problem can be elegantly solved by interrupting step 2) above. Instead= of passing through the reset, QEMU simply ignores it. To allow this to be configured on a per-device level, a new parameter "no_guest_reset" is introduced for the usb-host device. I can confirm that the configuration described above (iPhone XS + Mojave guest) works flawlessly with no_guest_reset=3DTrue specified. Working command line for my scenario: device_add usb-host,vendorid=3D0x05ac,productid=3D0x12a8,no_guest_reset=3DT= rue,id=3Diphone Best regards Alexander Signed-off-by: Alexander Kappner Signed-off-by: Gerd Hoffmann Message-id: 20190128140027.9448-1-kraxel@redhat.com [ kraxel: rename parameter to "guest-reset" ] Signed-off-by: Gerd Hoffmann --- hw/usb/host-libusb.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 833250a886af..67b7465915f5 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -82,7 +82,7 @@ struct USBHostDevice { uint32_t options; uint32_t loglevel; bool needs_autoscan; - + bool allow_guest_reset; /* state */ QTAILQ_ENTRY(USBHostDevice) next; int seen, errcount; @@ -1456,6 +1456,10 @@ static void usb_host_handle_reset(USBDevice *udev) USBHostDevice *s =3D USB_HOST_DEVICE(udev); int rc; =20 + if (!s->allow_guest_reset) { + return; + } + trace_usb_host_reset(s->bus_num, s->addr); =20 rc =3D libusb_reset_device(s->dh); @@ -1573,6 +1577,7 @@ static Property usb_host_dev_properties[] =3D { DEFINE_PROP_UINT32("productid", USBHostDevice, match.product_id, 0), DEFINE_PROP_UINT32("isobufs", USBHostDevice, iso_urb_count, 4), DEFINE_PROP_UINT32("isobsize", USBHostDevice, iso_urb_frames, 32), + DEFINE_PROP_BOOL("guest-reset", USBHostDevice, allow_guest_reset, true= ), DEFINE_PROP_UINT32("loglevel", USBHostDevice, loglevel, LIBUSB_LOG_LEVEL_WARNING), DEFINE_PROP_BIT("pipeline", USBHostDevice, options, --=20 2.18.1