From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BF0634CFAB for ; Fri, 14 Aug 2026 06:12:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786687942; cv=none; b=l+NtlO8srwgwK8kwuVxp6hmvCBHwbWYQhfqR+rV9+Lf2Qt9RtgahgRPtmbMAs3fMUmj7vasX2tU7YXUvP43/G6CAkoTGA10vWzWqeddFVjM/cNawhbNLMobyHACBqGJupsagOVZMEWS/JryKkaWCo/NAbyHM/hDfuJqrNX6ga50= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786687942; c=relaxed/simple; bh=10Kv2FmJUnjrrO2pajAEBNT0DNrUDPOaOU1/K3fMwlA=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=sS8l82b3L3iJyvupxJTJwLG4U0N5k/90QZPr4xyY73Dm7a0OSGadOPJUZeGTIGa8zverhnG2cEEL4qKhAcMwTjOxsVmAKPwYLcqz4GbkXbQ7EL2E/SvLnC8Cb59vf8cx5m4NU9PgzbEn5mIgi//J1NYbE5ROXYZGA2bu6pUUBkA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k0Ngs/3y; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="k0Ngs/3y" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A8541F00A3A; Fri, 14 Aug 2026 06:12:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786687940; bh=0QGhHeW9YcqLHztoxW0E6BfBeGTn/wrVNhcdEL0Ua7M=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=k0Ngs/3yTE6GZSGPhauxuCzhoYh4VfapjNAbSzOsx81lK1fOQEiipzblYlHdnwtLN gQH4Ga0tdL2CB5ymqC7l23rQF0OY0V/fJnqvPlLfRU+OBuVv5z1c1UE2MQEM0G7Qis dClOio56R832WXNV9gmf6qBonMg6LkQDwJLqWffo840q9aUxxp750cqcE6pTt5vDFK dqYLflwtFjjkuQZov20b0+Q69aecove1Pm4lV7oxYiOkWWFYw9SxTRuV02EFWQ/5P9 sSgeadDO1/NA6LEduXuYNL6Rftcnd+AuM+ny9nmFXsOJs9+7UVKGAIgKclA5JT5ktE MUeV5Y0agpgCQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v14 33/38] phy: rockchip: usbdp: Add phy reset notification support Reply-To: sashiko-reviews@lists.linux.dev To: "Sebastian Reichel" Cc: devicetree@vger.kernel.org, conor+dt@kernel.org, robh@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, linux-phy@lists.infradead.org, olteanv@gmail.com In-Reply-To: <20260813-rockchip-usbdp-cleanup-v14-33-b5ad9c68fa11@collabora.com> References: <20260813-rockchip-usbdp-cleanup-v14-0-b5ad9c68fa11@collabora.com> <20260813-rockchip-usbdp-cleanup-v14-33-b5ad9c68fa11@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 14 Aug 2026 06:12:16 +0000 Message-Id: <20260814061217.3A8541F00A3A@smtp.kernel.org> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 3 potential issue(= s) to consider: - [High] Unbalanced PM runtime reference decrement in the DWC3 PHY reset no= tifier due to mishandling of `-EINVAL`. - [High] The PHY reset notification handler in the DWC3 Rockchip driver acc= esses `dwc->gadget` without adequate synchronization, leading to a potentia= l Use-After-Free during a concurrent USB role switch. - [Medium] The return value of `phy_notify_reset(..., PHY_NOTIFY_PRE_RESET)= ` is ignored in `rk_udphy_power_on()`, potentially forcing a hardware reset= even if a consumer rejects the request. -- --- Patch [33]: [PATCH v14 33/38] phy: rockchip: usbdp: Add phy reset notif= ication support --- commit 101376e3124c8975c12127c9a52db0a5300092c4 Author: Sebastian Reichel Subject: phy: rockchip: usbdp: Add phy reset notification support To resolve issues with running into permanent cmn ana lcpll lock timeout errors after a few device replugs, this commit adds support for reset notifications. These notifications will be handled by the DWC3 driver to gracefully handle the PHY being disabled. This avoids corrupting the controller's internal state. > diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rock= chip/phy-rockchip-usbdp.c > index 59b836a3796ce..21f282216aef7 100644 > --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c > +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c > @@ -1005,24 +1005,39 @@ static int rk_udphy_power_on(struct rk_udphy *udp= hy, u8 mode) > } > =20 > if (udphy->status =3D=3D UDPHY_MODE_NONE) { > + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_PRE_RESET); > + [Severity: Medium] Is it intentional to ignore the return value of phy_notify_reset() here? In rk_udphy_update_power_state() the return value is checked and propagated, but here the reset proceeds even if a consumer rejects the request. Can this force a hardware reset when the consumer is unready, risking state corrupti= on? [Severity: High] Does triggering this notification expose a PM runtime usage counter underfl= ow in the DWC3 driver? If the PHY mode change triggers a PRE_RESET notification while runtime PM is disabled for the device: drivers/usb/dwc3/dwc3-rockchip.c:dwc3_usb3_phy_notify() { ... ret =3D pm_runtime_get_if_active(dwc->dev); if (!ret) return NOTIFY_OK; ... } The pm_runtime_get_if_active() call returns -EINVAL if PM is disabled. Beca= use this is non-zero, the driver bypasses the !ret check without incrementing t= he usage count. However, during POST_RESET, it unconditionally calls: pm_runtime_put_autosuspend(dwc->dev); Will this internally force a decrement of the usage count and cause an underflow? [Severity: High] Does triggering this notification also expose a potential use-after-free in= the DWC3 driver during a concurrent USB role switch? When the POST_RESET notification is handled, dwc3_usb3_phy_notify() drops the lock and calls dwc3_rockchip_vbus_handler(): drivers/usb/dwc3/dwc3-rockchip.c:dwc3_usb3_phy_notify() { ... spin_unlock_irqrestore(&dwc->lock, flags); dwc3_rockchip_vbus_handler(dwc, dwc_rk->role =3D=3D USB_ROLE_DEVICE); ... } Inside dwc3_rockchip_vbus_handler(): if (!dwc->gadget || !dwc->gadget_driver) return; usb_udc_vbus_handler(dwc->gadget, present); Since this runs asynchronously, a concurrent USB role switch to host mode could trigger dwc3_gadget_exit(), which unregisters and frees dwc->gadget. Is there a time-of-check to time-of-use window between the NULL check and t= he dereference of dwc->gadget? > + rk_udphy_u3_port_disable(udphy, true); > + udelay(10); > + > ret =3D rk_udphy_setup(udphy); > - if (ret) > + if (ret) { > + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); > return ret; > + } > =20 > if (!udphy->hs && udphy->mode & UDPHY_MODE_USB) > rk_udphy_u3_port_disable(udphy, false); > udphy->phy_needs_reinit =3D false; > + > + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); > } else if (udphy->phy_needs_reinit) { > + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_PRE_RESET); > + [Severity: Medium] Similarly here, the return value of phy_notify_reset() for PHY_NOTIFY_PRE_R= ESET is ignored before proceeding with the hardware reset. Should it be checked? > + rk_udphy_u3_port_disable(udphy, true); > + udelay(10); > + > ret =3D rk_udphy_init(udphy); --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260813-rockchip-u= sbdp-cleanup-v14-0-b5ad9c68fa11@collabora.com?part=3D33 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5C4B1C5CFDB for ; Fri, 14 Aug 2026 06:12:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ybCCYNQSoYZBHJqy9W5hjeXJ6Qyw2pXKcCM2nYzURzY=; b=YhJpabgRU8pNuk 6MeSnJC3ZnSSowER7EUvo3vl4skPl4iJQOVe8UrXk3juSJLOuBDb6W+WUcd2OHhwggRf0V81vThq6 KxzNQK1QyvIRy+O1SpOm51WAMYZcziSxcVfbwQQfOC1OdjORnVHDlTdv5Rarkdb7sXSmRGApDPcjV c3azIBaofSmbSvyePO+MZn1aPDluBXVOHKyqShIyXwWs0OX8Xr6yxbv9rCLS02pC7hrKXVE7mZKks mAivwhA2sYeBaH77+jtHT47uoJkVQr71qxcCkCKxwTTCVNsFuSNFqg2S1/sXz0f8bLyEycBxK9jug quM8Y584YRfeDLIjmk6A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wul9S-000000020hx-3FED; Fri, 14 Aug 2026 06:12:22 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wul9R-000000020hZ-2DJY for linux-phy@lists.infradead.org; Fri, 14 Aug 2026 06:12:21 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id EFA2940314; Fri, 14 Aug 2026 06:12:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A8541F00A3A; Fri, 14 Aug 2026 06:12:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786687940; bh=0QGhHeW9YcqLHztoxW0E6BfBeGTn/wrVNhcdEL0Ua7M=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=k0Ngs/3yTE6GZSGPhauxuCzhoYh4VfapjNAbSzOsx81lK1fOQEiipzblYlHdnwtLN gQH4Ga0tdL2CB5ymqC7l23rQF0OY0V/fJnqvPlLfRU+OBuVv5z1c1UE2MQEM0G7Qis dClOio56R832WXNV9gmf6qBonMg6LkQDwJLqWffo840q9aUxxp750cqcE6pTt5vDFK dqYLflwtFjjkuQZov20b0+Q69aecove1Pm4lV7oxYiOkWWFYw9SxTRuV02EFWQ/5P9 sSgeadDO1/NA6LEduXuYNL6Rftcnd+AuM+ny9nmFXsOJs9+7UVKGAIgKclA5JT5ktE MUeV5Y0agpgCQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v14 33/38] phy: rockchip: usbdp: Add phy reset notification support To: "Sebastian Reichel" Cc: devicetree@vger.kernel.org, conor+dt@kernel.org, robh@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, linux-phy@lists.infradead.org, olteanv@gmail.com In-Reply-To: <20260813-rockchip-usbdp-cleanup-v14-33-b5ad9c68fa11@collabora.com> References: <20260813-rockchip-usbdp-cleanup-v14-0-b5ad9c68fa11@collabora.com> <20260813-rockchip-usbdp-cleanup-v14-33-b5ad9c68fa11@collabora.com> Date: Fri, 14 Aug 2026 06:12:16 +0000 Message-Id: <20260814061217.3A8541F00A3A@smtp.kernel.org> X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIFVuYmFsYW5jZWQgUE0g cnVudGltZSByZWZlcmVuY2UgZGVjcmVtZW50IGluIHRoZSBEV0MzIFBIWSByZXNldCBub3RpZmll ciBkdWUgdG8gbWlzaGFuZGxpbmcgb2YgYC1FSU5WQUxgLgotIFtIaWdoXSBUaGUgUEhZIHJlc2V0 IG5vdGlmaWNhdGlvbiBoYW5kbGVyIGluIHRoZSBEV0MzIFJvY2tjaGlwIGRyaXZlciBhY2Nlc3Nl cyBgZHdjLT5nYWRnZXRgIHdpdGhvdXQgYWRlcXVhdGUgc3luY2hyb25pemF0aW9uLCBsZWFkaW5n IHRvIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIGR1cmluZyBhIGNvbmN1cnJlbnQgVVNCIHJv bGUgc3dpdGNoLgotIFtNZWRpdW1dIFRoZSByZXR1cm4gdmFsdWUgb2YgYHBoeV9ub3RpZnlfcmVz ZXQoLi4uLCBQSFlfTk9USUZZX1BSRV9SRVNFVClgIGlzIGlnbm9yZWQgaW4gYHJrX3VkcGh5X3Bv d2VyX29uKClgLCBwb3RlbnRpYWxseSBmb3JjaW5nIGEgaGFyZHdhcmUgcmVzZXQgZXZlbiBpZiBh IGNvbnN1bWVyIHJlamVjdHMgdGhlIHJlcXVlc3QuCi0tCgotLS0gUGF0Y2ggWzMzXTogW1BBVENI IHYxNCAzMy8zOF0gcGh5OiByb2NrY2hpcDogdXNiZHA6IEFkZCBwaHkgcmVzZXQgbm90aWZpY2F0 aW9uIHN1cHBvcnQgLS0tCmNvbW1pdCAxMDEzNzZlMzEyNGM4OTc1YzEyMTI3YzlhNTJkYjBhNTMw MDA5MmM0CkF1dGhvcjogU2ViYXN0aWFuIFJlaWNoZWwgPHNlYmFzdGlhbi5yZWljaGVsQGNvbGxh Ym9yYS5jb20+ClN1YmplY3Q6IHBoeTogcm9ja2NoaXA6IHVzYmRwOiBBZGQgcGh5IHJlc2V0IG5v dGlmaWNhdGlvbiBzdXBwb3J0CgpUbyByZXNvbHZlIGlzc3VlcyB3aXRoIHJ1bm5pbmcgaW50byBw ZXJtYW5lbnQgY21uIGFuYSBsY3BsbCBsb2NrIHRpbWVvdXQKZXJyb3JzIGFmdGVyIGEgZmV3IGRl dmljZSByZXBsdWdzLCB0aGlzIGNvbW1pdCBhZGRzIHN1cHBvcnQgZm9yIHJlc2V0Cm5vdGlmaWNh dGlvbnMuIFRoZXNlIG5vdGlmaWNhdGlvbnMgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBEV0MzIGRy aXZlciB0bwpncmFjZWZ1bGx5IGhhbmRsZSB0aGUgUEhZIGJlaW5nIGRpc2FibGVkLiBUaGlzIGF2 b2lkcyBjb3JydXB0aW5nIHRoZQpjb250cm9sbGVyJ3MgaW50ZXJuYWwgc3RhdGUuCgo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtdXNiZHAuYyBiL2RyaXZl cnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC11c2JkcC5jCj4gaW5kZXggNTliODM2YTM3OTZj ZS4uMjFmMjgyMjE2YWVmNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHkt cm9ja2NoaXAtdXNiZHAuYwo+ICsrKyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hp cC11c2JkcC5jCj4gQEAgLTEwMDUsMjQgKzEwMDUsMzkgQEAgc3RhdGljIGludCBya191ZHBoeV9w b3dlcl9vbihzdHJ1Y3QgcmtfdWRwaHkgKnVkcGh5LCB1OCBtb2RlKQo+ICAJfQo+ICAKPiAgCWlm ICh1ZHBoeS0+c3RhdHVzID09IFVEUEhZX01PREVfTk9ORSkgewo+ICsJCXBoeV9ub3RpZnlfcmVz ZXQodWRwaHktPnBoeV91MywgUEhZX05PVElGWV9QUkVfUkVTRVQpOwo+ICsKCltTZXZlcml0eTog TWVkaXVtXQpJcyBpdCBpbnRlbnRpb25hbCB0byBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBw aHlfbm90aWZ5X3Jlc2V0KCkgaGVyZT8KCkluIHJrX3VkcGh5X3VwZGF0ZV9wb3dlcl9zdGF0ZSgp IHRoZSByZXR1cm4gdmFsdWUgaXMgY2hlY2tlZCBhbmQgcHJvcGFnYXRlZCwKYnV0IGhlcmUgdGhl IHJlc2V0IHByb2NlZWRzIGV2ZW4gaWYgYSBjb25zdW1lciByZWplY3RzIHRoZSByZXF1ZXN0LiBD YW4gdGhpcwpmb3JjZSBhIGhhcmR3YXJlIHJlc2V0IHdoZW4gdGhlIGNvbnN1bWVyIGlzIHVucmVh ZHksIHJpc2tpbmcgc3RhdGUgY29ycnVwdGlvbj8KCgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdHJp Z2dlcmluZyB0aGlzIG5vdGlmaWNhdGlvbiBleHBvc2UgYSBQTSBydW50aW1lIHVzYWdlIGNvdW50 ZXIgdW5kZXJmbG93CmluIHRoZSBEV0MzIGRyaXZlcj8KCklmIHRoZSBQSFkgbW9kZSBjaGFuZ2Ug dHJpZ2dlcnMgYSBQUkVfUkVTRVQgbm90aWZpY2F0aW9uIHdoaWxlIHJ1bnRpbWUgUE0gaXMKZGlz YWJsZWQgZm9yIHRoZSBkZXZpY2U6Cgpkcml2ZXJzL3VzYi9kd2MzL2R3YzMtcm9ja2NoaXAuYzpk d2MzX3VzYjNfcGh5X25vdGlmeSgpIHsKICAgIC4uLgogICAgcmV0ID0gcG1fcnVudGltZV9nZXRf aWZfYWN0aXZlKGR3Yy0+ZGV2KTsKICAgIGlmICghcmV0KQogICAgICAgIHJldHVybiBOT1RJRllf T0s7CiAgICAuLi4KfQoKVGhlIHBtX3J1bnRpbWVfZ2V0X2lmX2FjdGl2ZSgpIGNhbGwgcmV0dXJu cyAtRUlOVkFMIGlmIFBNIGlzIGRpc2FibGVkLiBCZWNhdXNlCnRoaXMgaXMgbm9uLXplcm8sIHRo ZSBkcml2ZXIgYnlwYXNzZXMgdGhlICFyZXQgY2hlY2sgd2l0aG91dCBpbmNyZW1lbnRpbmcgdGhl CnVzYWdlIGNvdW50LgoKSG93ZXZlciwgZHVyaW5nIFBPU1RfUkVTRVQsIGl0IHVuY29uZGl0aW9u YWxseSBjYWxsczoKCiAgICBwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChkd2MtPmRldik7CgpX aWxsIHRoaXMgaW50ZXJuYWxseSBmb3JjZSBhIGRlY3JlbWVudCBvZiB0aGUgdXNhZ2UgY291bnQg YW5kIGNhdXNlIGFuCnVuZGVyZmxvdz8KCgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdHJpZ2dlcmlu ZyB0aGlzIG5vdGlmaWNhdGlvbiBhbHNvIGV4cG9zZSBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJl ZSBpbiB0aGUKRFdDMyBkcml2ZXIgZHVyaW5nIGEgY29uY3VycmVudCBVU0Igcm9sZSBzd2l0Y2g/ CgpXaGVuIHRoZSBQT1NUX1JFU0VUIG5vdGlmaWNhdGlvbiBpcyBoYW5kbGVkLCBkd2MzX3VzYjNf cGh5X25vdGlmeSgpIGRyb3BzCnRoZSBsb2NrIGFuZCBjYWxscyBkd2MzX3JvY2tjaGlwX3ZidXNf aGFuZGxlcigpOgoKZHJpdmVycy91c2IvZHdjMy9kd2MzLXJvY2tjaGlwLmM6ZHdjM191c2IzX3Bo eV9ub3RpZnkoKSB7CiAgICAuLi4KICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3Yy0+bG9j aywgZmxhZ3MpOwogICAgZHdjM19yb2NrY2hpcF92YnVzX2hhbmRsZXIoZHdjLCBkd2NfcmstPnJv bGUgPT0gVVNCX1JPTEVfREVWSUNFKTsKICAgIC4uLgp9CgpJbnNpZGUgZHdjM19yb2NrY2hpcF92 YnVzX2hhbmRsZXIoKToKCiAgICBpZiAoIWR3Yy0+Z2FkZ2V0IHx8ICFkd2MtPmdhZGdldF9kcml2 ZXIpCiAgICAgICAgcmV0dXJuOwoKICAgIHVzYl91ZGNfdmJ1c19oYW5kbGVyKGR3Yy0+Z2FkZ2V0 LCBwcmVzZW50KTsKClNpbmNlIHRoaXMgcnVucyBhc3luY2hyb25vdXNseSwgYSBjb25jdXJyZW50 IFVTQiByb2xlIHN3aXRjaCB0byBob3N0IG1vZGUKY291bGQgdHJpZ2dlciBkd2MzX2dhZGdldF9l eGl0KCksIHdoaWNoIHVucmVnaXN0ZXJzIGFuZCBmcmVlcyBkd2MtPmdhZGdldC4KCklzIHRoZXJl IGEgdGltZS1vZi1jaGVjayB0byB0aW1lLW9mLXVzZSB3aW5kb3cgYmV0d2VlbiB0aGUgTlVMTCBj aGVjayBhbmQgdGhlCmRlcmVmZXJlbmNlIG9mIGR3Yy0+Z2FkZ2V0PwoKPiArCQlya191ZHBoeV91 M19wb3J0X2Rpc2FibGUodWRwaHksIHRydWUpOwo+ICsJCXVkZWxheSgxMCk7Cj4gKwo+ICAJCXJl dCA9IHJrX3VkcGh5X3NldHVwKHVkcGh5KTsKPiAtCQlpZiAocmV0KQo+ICsJCWlmIChyZXQpIHsK PiArCQkJcGh5X25vdGlmeV9yZXNldCh1ZHBoeS0+cGh5X3UzLCBQSFlfTk9USUZZX1BPU1RfUkVT RVQpOwo+ICAJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiAgCj4gIAkJaWYgKCF1ZHBoeS0+aHMgJiYg dWRwaHktPm1vZGUgJiBVRFBIWV9NT0RFX1VTQikKPiAgCQkJcmtfdWRwaHlfdTNfcG9ydF9kaXNh YmxlKHVkcGh5LCBmYWxzZSk7Cj4gIAkJdWRwaHktPnBoeV9uZWVkc19yZWluaXQgPSBmYWxzZTsK PiArCj4gKwkJcGh5X25vdGlmeV9yZXNldCh1ZHBoeS0+cGh5X3UzLCBQSFlfTk9USUZZX1BPU1Rf UkVTRVQpOwo+ICAJfSBlbHNlIGlmICh1ZHBoeS0+cGh5X25lZWRzX3JlaW5pdCkgewo+ICsJCXBo eV9ub3RpZnlfcmVzZXQodWRwaHktPnBoeV91MywgUEhZX05PVElGWV9QUkVfUkVTRVQpOwo+ICsK CltTZXZlcml0eTogTWVkaXVtXQpTaW1pbGFybHkgaGVyZSwgdGhlIHJldHVybiB2YWx1ZSBvZiBw aHlfbm90aWZ5X3Jlc2V0KCkgZm9yIFBIWV9OT1RJRllfUFJFX1JFU0VUCmlzIGlnbm9yZWQgYmVm b3JlIHByb2NlZWRpbmcgd2l0aCB0aGUgaGFyZHdhcmUgcmVzZXQuIFNob3VsZCBpdCBiZSBjaGVj a2VkPwoKPiArCQlya191ZHBoeV91M19wb3J0X2Rpc2FibGUodWRwaHksIHRydWUpOwo+ICsJCXVk ZWxheSgxMCk7Cj4gKwo+ICAJCXJldCA9IHJrX3VkcGh5X2luaXQodWRwaHkpOwoKLS0gClNhc2hp a28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vc2FzaGlrby5kZXYvIy9wYXRjaHNldC8yMDI2MDgxMy1y b2NrY2hpcC11c2JkcC1jbGVhbnVwLXYxNC0wLWI1YWQ5YzY4ZmExMUBjb2xsYWJvcmEuY29tP3Bh cnQ9MzMKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXBoeQo=