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 B54123A71A8; Thu, 30 Jul 2026 10:23:54 +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=1785407035; cv=none; b=GywYFYL1mE1fWxX4zaFpnVvrSS1kDXGjlHEv4/XiZQwMU3jBq5M8Qmx2upFXQgmBkIWIkmf4UOR1dTdkNq6fZmB97T3RJ/vWB0V0tDtwBG81x59+MNsnVx/xVRAZpOxDVr1Nm4l3a5c40xgdFtI175Z9+CEfeR84y5s+v0W1ayo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785407035; c=relaxed/simple; bh=3s6gJLRDbm0o3vgou5sG1BIyH1H5nRgZR1oonF4K9Ng=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=mkmzSViCVwajdaS9rs+t54bLbq/kiue7KPEcepVSRfk51HKpcHA50ONTbQc4UUJJ3xVHhoa+0SXykS6ZYOIqxUxuiYO5tFSOs1q+lnPfZedputVu8HkFScsS8+x6+h0h5nXqFpANZRebibYvDWygZP9IPRCEPna6n/9AtKFpWTM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Z8KqiF3G; 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="Z8KqiF3G" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E811F1F000E9; Thu, 30 Jul 2026 10:23:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785407034; bh=Uk6VtPeCvlYjRrRZ+uVLXSq1rSrpwZvzAcFksOKIteA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Z8KqiF3G7/85Yg+8cgr77OxAvA8btC2FA60bgErR9liASSP7IuFOPxL3vbbgBoQms fIl9iHuAA3DTxpRoYyEemEZyYcUJbCfCJG38m4MWeuHhkBgNYS0u8jmFkcCWPLtlO9 x+vyvh+V4WSKf3DNSZGRxvCEQsG2YjjIWVszIh+K5POaGmT6ZVxZnRCz6Mev0ZdSH0 UBy4SrrEyz+AlYO1n+bgQP8PveSzr1e5U0rmOMYp5F15DwoIMOl1JJ03Uf8gz1uRuw 4/WWmU3WqnFVQS79YU8aVJAxCECZdzLmS7sW2dLmkWRpZAFOA1amyYYH79GN5WGH5H 8FPtsQnKBo3Ew== From: sashiko-bot@kernel.org Subject: Re: [PATCH v10 11/26] scsi: ufs: mediatek: Remove undocumented downstream reset cruft Reply-To: sashiko-reviews@lists.linux.dev To: "Louis-Alexis Eyraud" Cc: robh@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, devicetree@vger.kernel.org, linux-scsi@vger.kernel.org, linux-phy@lists.infradead.org, vkoul@kernel.org, conor+dt@kernel.org In-Reply-To: <20260730-mt8196-ufs-v10-11-bc5ecef202dc@collabora.com> References: <20260730-mt8196-ufs-v10-0-bc5ecef202dc@collabora.com> <20260730-mt8196-ufs-v10-11-bc5ecef202dc@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 30 Jul 2026 10:23:53 +0000 Message-Id: <20260730102353.E811F1F000E9@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 2 potential issue(= s) to consider: Pre-existing issues: - [High] The kobject reference for `phy_dev` is dropped too early during pr= obe, leaving a dangling pointer stored in `host->phy_dev` that leads to a u= se-after-free in runtime PM callbacks. - [High] The runtime PM usage count and enablement state for `phy_dev` are = permanently leaked if the probe fails, and the PM state is never restored o= n driver removal. -- --- Patch [11]: [PATCH v10 11/26] scsi: ufs: mediatek: Remove undocumented = downstream reset cruft --- commit 2e47ec1b9626d31e1288701fe0c4a25c195e38d4 Author: Nicolas Frattaroli scsi: ufs: mediatek: Remove undocumented downstream reset cruft The MediaTek UFS host driver's probe function allows using a ti,syscon-reset as a reset, without going through the appropriate abstractions or documenti= ng this in the binding. This commit removes this downstream code as it does not belong here. > diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-media= tek.c > index 65036c8390318..a2749e79514c4 100644 > --- a/drivers/ufs/host/ufs-mediatek.c > +++ b/drivers/ufs/host/ufs-mediatek.c > @@ -2402,38 +2402,12 @@ MODULE_DEVICE_TABLE(of, ufs_mtk_of_match); > static int ufs_mtk_probe(struct platform_device *pdev) > { > int err; > - struct device *dev =3D &pdev->dev, *phy_dev =3D NULL; > - struct device_node *reset_node, *phy_node =3D NULL; > - struct platform_device *reset_pdev, *phy_pdev =3D NULL; > - struct device_link *link; > struct ufs_hba *hba; > + struct platform_device *phy_pdev =3D NULL; > + struct device *dev =3D &pdev->dev, *phy_dev =3D NULL; > + struct device_node *phy_node =3D NULL; > struct ufs_mtk_host *host; > =20 > - reset_node =3D of_find_compatible_node(NULL, NULL, > - "ti,syscon-reset"); > - if (!reset_node) { > - dev_notice(dev, "find ti,syscon-reset fail\n"); > - goto skip_reset; > - } > - reset_pdev =3D of_find_device_by_node(reset_node); > - if (!reset_pdev) { > - dev_notice(dev, "find reset_pdev fail\n"); > - goto skip_reset; > - } > - link =3D device_link_add(dev, &reset_pdev->dev, > - DL_FLAG_AUTOPROBE_CONSUMER); > - put_device(&reset_pdev->dev); > - if (!link) { > - dev_notice(dev, "add reset device_link fail\n"); > - goto skip_reset; > - } > - /* supplier is not probed */ > - if (link->status =3D=3D DL_STATE_DORMANT) { > - err =3D -EPROBE_DEFER; > - goto out; > - } > - > -skip_reset: > /* find phy node */ > phy_node =3D of_parse_phandle(dev->of_node, "phys", 0); > =20 > @@ -2479,7 +2453,6 @@ static int ufs_mtk_probe(struct platform_device *pd= ev) > =20 > out: > of_node_put(phy_node); > - of_node_put(reset_node); > return err; > } [Severity: High] This isn't a bug introduced by this patch, but could this lead to a use-after-free of phy_dev? In ufs_mtk_probe(), after looking up the PHY device, the kobject reference is dropped almost immediately: drivers/ufs/host/ufs-mediatek.c:ufs_mtk_probe() { phy_pdev =3D of_find_device_by_node(phy_node); if (!phy_pdev) goto skip_phy; phy_dev =3D &phy_pdev->dev; ... put_device(phy_dev); ... } However, the pointer is later saved into the host structure for later use: drivers/ufs/host/ufs-mediatek.c:ufs_mtk_probe() { ... if (phy_node && phy_dev) { host =3D ufshcd_get_variant(hba); host->phy_dev =3D phy_dev; } ... } If the PHY device is later unbound via sysfs and its memory freed, would the UFS host's runtime PM callbacks, such as ufs_mtk_runtime_suspend(), dereference this dangling host->phy_dev pointer when calling pm_runtime_put_sync()? [Severity: High] This is also a pre-existing issue, but is there a PM runtime usage count leak in ufs_mtk_probe() on error paths? If a failure occurs during initialization (e.g., ufshcd_pltfrm_init() fails= ), the function jumps to the out label without calling pm_runtime_put_sync() or pm_runtime_disable() for phy_dev: drivers/ufs/host/ufs-mediatek.c:ufs_mtk_probe() { if (phy_node) { ... pm_runtime_enable(phy_dev); pm_runtime_get_sync(phy_dev); ... } ... err =3D ufshcd_pltfrm_init(pdev, &ufs_hba_mtk_vops); if (err) goto out; ... out: of_node_put(phy_node); return err; } Additionally, ufs_mtk_remove() doesn't appear to tear down this state. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260730-mt8196-ufs= -v10-0-bc5ecef202dc@collabora.com?part=3D11 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 86714C54FDF for ; Thu, 30 Jul 2026 10:23:57 +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=QIhodrWoGtufz9P0aitos9Sq4asbypSbR4nu9+o1MY0=; b=Fqhkgu12jmSW7n G4GR2B0+a+JKivNl0v3a0BR9gih34fWMX3kUNw70xtxhp7c9BqyMv7bLGrqQWfJEopw4xjRx7b3le J+9nFF9gB4mZ7sWcUWPRIuUUk5SA3SY5y0HsEjw/J2t7jSGtQbnPycj4ofNyQ1nsNKikAnCwL+7Io 8I+dZ/c5IKc6PKzWIgtSfNXFbXrgD2Twv8s/GhiOZQ9/4e4O6Z4unhT/U57RorJI4Q6SuyRF4yhrG c4HrjSsq2s9u2py9saoem+y0DpZ/R2U2wDyWm3MoBeTLaMOm41V+kJ7iRqFvouBsxLQVsUl7qcsIV TZlMkkKgoo3qRv/K0Edg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wpNvg-0000000ABED-1xoe; Thu, 30 Jul 2026 10:23:57 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wpNvf-0000000ABDo-2eUy for linux-phy@lists.infradead.org; Thu, 30 Jul 2026 10:23:55 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id AC17C60120; Thu, 30 Jul 2026 10:23:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E811F1F000E9; Thu, 30 Jul 2026 10:23:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785407034; bh=Uk6VtPeCvlYjRrRZ+uVLXSq1rSrpwZvzAcFksOKIteA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Z8KqiF3G7/85Yg+8cgr77OxAvA8btC2FA60bgErR9liASSP7IuFOPxL3vbbgBoQms fIl9iHuAA3DTxpRoYyEemEZyYcUJbCfCJG38m4MWeuHhkBgNYS0u8jmFkcCWPLtlO9 x+vyvh+V4WSKf3DNSZGRxvCEQsG2YjjIWVszIh+K5POaGmT6ZVxZnRCz6Mev0ZdSH0 UBy4SrrEyz+AlYO1n+bgQP8PveSzr1e5U0rmOMYp5F15DwoIMOl1JJ03Uf8gz1uRuw 4/WWmU3WqnFVQS79YU8aVJAxCECZdzLmS7sW2dLmkWRpZAFOA1amyYYH79GN5WGH5H 8FPtsQnKBo3Ew== From: sashiko-bot@kernel.org Subject: Re: [PATCH v10 11/26] scsi: ufs: mediatek: Remove undocumented downstream reset cruft To: "Louis-Alexis Eyraud" Cc: robh@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, devicetree@vger.kernel.org, linux-scsi@vger.kernel.org, linux-phy@lists.infradead.org, vkoul@kernel.org, conor+dt@kernel.org In-Reply-To: <20260730-mt8196-ufs-v10-11-bc5ecef202dc@collabora.com> References: <20260730-mt8196-ufs-v10-0-bc5ecef202dc@collabora.com> <20260730-mt8196-ufs-v10-11-bc5ecef202dc@collabora.com> Date: Thu, 30 Jul 2026 10:23:53 +0000 Message-Id: <20260730102353.E811F1F000E9@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 MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpQcmUtZXhpc3RpbmcgaXNzdWVzOgot IFtIaWdoXSBUaGUga29iamVjdCByZWZlcmVuY2UgZm9yIGBwaHlfZGV2YCBpcyBkcm9wcGVkIHRv byBlYXJseSBkdXJpbmcgcHJvYmUsIGxlYXZpbmcgYSBkYW5nbGluZyBwb2ludGVyIHN0b3JlZCBp biBgaG9zdC0+cGh5X2RldmAgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIGluIHJ1bnRp bWUgUE0gY2FsbGJhY2tzLgotIFtIaWdoXSBUaGUgcnVudGltZSBQTSB1c2FnZSBjb3VudCBhbmQg ZW5hYmxlbWVudCBzdGF0ZSBmb3IgYHBoeV9kZXZgIGFyZSBwZXJtYW5lbnRseSBsZWFrZWQgaWYg dGhlIHByb2JlIGZhaWxzLCBhbmQgdGhlIFBNIHN0YXRlIGlzIG5ldmVyIHJlc3RvcmVkIG9uIGRy aXZlciByZW1vdmFsLgotLQoKLS0tIFBhdGNoIFsxMV06IFtQQVRDSCB2MTAgMTEvMjZdIHNjc2k6 IHVmczogbWVkaWF0ZWs6IFJlbW92ZSB1bmRvY3VtZW50ZWQgZG93bnN0cmVhbSByZXNldCBjcnVm dCAtLS0KY29tbWl0IDJlNDdlYzFiOTYyNmQzMWUxMjg4NzAxZmUwYzRhMjVjMTk1ZTM4ZDQKQXV0 aG9yOiBOaWNvbGFzIEZyYXR0YXJvbGkgPG5pY29sYXMuZnJhdHRhcm9saUBjb2xsYWJvcmEuY29t PgoKc2NzaTogdWZzOiBtZWRpYXRlazogUmVtb3ZlIHVuZG9jdW1lbnRlZCBkb3duc3RyZWFtIHJl c2V0IGNydWZ0CgpUaGUgTWVkaWFUZWsgVUZTIGhvc3QgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24g YWxsb3dzIHVzaW5nIGEgdGksc3lzY29uLXJlc2V0CmFzIGEgcmVzZXQsIHdpdGhvdXQgZ29pbmcg dGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgYWJzdHJhY3Rpb25zIG9yIGRvY3VtZW50aW5nCnRoaXMg aW4gdGhlIGJpbmRpbmcuIFRoaXMgY29tbWl0IHJlbW92ZXMgdGhpcyBkb3duc3RyZWFtIGNvZGUg YXMgaXQgZG9lcyBub3QKYmVsb25nIGhlcmUuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Vmcy9o b3N0L3Vmcy1tZWRpYXRlay5jIGIvZHJpdmVycy91ZnMvaG9zdC91ZnMtbWVkaWF0ZWsuYwo+IGlu ZGV4IDY1MDM2YzgzOTAzMTguLmEyNzQ5ZTc5NTE0YzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91 ZnMvaG9zdC91ZnMtbWVkaWF0ZWsuYwo+ICsrKyBiL2RyaXZlcnMvdWZzL2hvc3QvdWZzLW1lZGlh dGVrLmMKPiBAQCAtMjQwMiwzOCArMjQwMiwxMiBAQCBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB1 ZnNfbXRrX29mX21hdGNoKTsKPiAgc3RhdGljIGludCB1ZnNfbXRrX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIHsKPiAgCWludCBlcnI7Cj4gLQlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmcGRldi0+ZGV2LCAqcGh5X2RldiA9IE5VTEw7Cj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUg KnJlc2V0X25vZGUsICpwaHlfbm9kZSA9IE5VTEw7Cj4gLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpyZXNldF9wZGV2LCAqcGh5X3BkZXYgPSBOVUxMOwo+IC0Jc3RydWN0IGRldmljZV9saW5rICps aW5rOwo+ICAJc3RydWN0IHVmc19oYmEgKmhiYTsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBoeV9wZGV2ID0gTlVMTDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXYsICpw aHlfZGV2ID0gTlVMTDsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGUgPSBOVUxMOwo+ ICAJc3RydWN0IHVmc19tdGtfaG9zdCAqaG9zdDsKPiAgCj4gLQlyZXNldF9ub2RlID0gb2ZfZmlu ZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKPiAtCQkJCQkgICAgICJ0aSxzeXNjb24tcmVz ZXQiKTsKPiAtCWlmICghcmVzZXRfbm9kZSkgewo+IC0JCWRldl9ub3RpY2UoZGV2LCAiZmluZCB0 aSxzeXNjb24tcmVzZXQgZmFpbFxuIik7Cj4gLQkJZ290byBza2lwX3Jlc2V0Owo+IC0JfQo+IC0J cmVzZXRfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocmVzZXRfbm9kZSk7Cj4gLQlpZiAo IXJlc2V0X3BkZXYpIHsKPiAtCQlkZXZfbm90aWNlKGRldiwgImZpbmQgcmVzZXRfcGRldiBmYWls XG4iKTsKPiAtCQlnb3RvIHNraXBfcmVzZXQ7Cj4gLQl9Cj4gLQlsaW5rID0gZGV2aWNlX2xpbmtf YWRkKGRldiwgJnJlc2V0X3BkZXYtPmRldiwKPiAtCQlETF9GTEFHX0FVVE9QUk9CRV9DT05TVU1F Uik7Cj4gLQlwdXRfZGV2aWNlKCZyZXNldF9wZGV2LT5kZXYpOwo+IC0JaWYgKCFsaW5rKSB7Cj4g LQkJZGV2X25vdGljZShkZXYsICJhZGQgcmVzZXQgZGV2aWNlX2xpbmsgZmFpbFxuIik7Cj4gLQkJ Z290byBza2lwX3Jlc2V0Owo+IC0JfQo+IC0JLyogc3VwcGxpZXIgaXMgbm90IHByb2JlZCAqLwo+ IC0JaWYgKGxpbmstPnN0YXR1cyA9PSBETF9TVEFURV9ET1JNQU5UKSB7Cj4gLQkJZXJyID0gLUVQ Uk9CRV9ERUZFUjsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLXNraXBfcmVzZXQ6Cj4gIAkv KiBmaW5kIHBoeSBub2RlICovCj4gIAlwaHlfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5v Zl9ub2RlLCAicGh5cyIsIDApOwo+ICAKPiBAQCAtMjQ3OSw3ICsyNDUzLDYgQEAgc3RhdGljIGlu dCB1ZnNfbXRrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAo+ICBvdXQ6 Cj4gIAlvZl9ub2RlX3B1dChwaHlfbm9kZSk7Cj4gLQlvZl9ub2RlX3B1dChyZXNldF9ub2RlKTsK PiAgCXJldHVybiBlcnI7Cj4gIH0KCltTZXZlcml0eTogSGlnaF0KVGhpcyBpc24ndCBhIGJ1ZyBp bnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGJ1dCBjb3VsZCB0aGlzIGxlYWQgdG8gYQp1c2UtYWZ0 ZXItZnJlZSBvZiBwaHlfZGV2PwoKSW4gdWZzX210a19wcm9iZSgpLCBhZnRlciBsb29raW5nIHVw IHRoZSBQSFkgZGV2aWNlLCB0aGUga29iamVjdCByZWZlcmVuY2UKaXMgZHJvcHBlZCBhbG1vc3Qg aW1tZWRpYXRlbHk6Cgpkcml2ZXJzL3Vmcy9ob3N0L3Vmcy1tZWRpYXRlay5jOnVmc19tdGtfcHJv YmUoKSB7CglwaHlfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGh5X25vZGUpOwoJaWYg KCFwaHlfcGRldikKCQlnb3RvIHNraXBfcGh5OwoJcGh5X2RldiA9ICZwaHlfcGRldi0+ZGV2OwoJ Li4uCglwdXRfZGV2aWNlKHBoeV9kZXYpOwoJLi4uCn0KCkhvd2V2ZXIsIHRoZSBwb2ludGVyIGlz IGxhdGVyIHNhdmVkIGludG8gdGhlIGhvc3Qgc3RydWN0dXJlIGZvciBsYXRlciB1c2U6Cgpkcml2 ZXJzL3Vmcy9ob3N0L3Vmcy1tZWRpYXRlay5jOnVmc19tdGtfcHJvYmUoKSB7CgkuLi4KCWlmIChw aHlfbm9kZSAmJiBwaHlfZGV2KSB7CgkJaG9zdCA9IHVmc2hjZF9nZXRfdmFyaWFudChoYmEpOwoJ CWhvc3QtPnBoeV9kZXYgPSBwaHlfZGV2OwoJfQoJLi4uCn0KCklmIHRoZSBQSFkgZGV2aWNlIGlz IGxhdGVyIHVuYm91bmQgdmlhIHN5c2ZzIGFuZCBpdHMgbWVtb3J5IGZyZWVkLCB3b3VsZCB0aGUK VUZTIGhvc3QncyBydW50aW1lIFBNIGNhbGxiYWNrcywgc3VjaCBhcyB1ZnNfbXRrX3J1bnRpbWVf c3VzcGVuZCgpLApkZXJlZmVyZW5jZSB0aGlzIGRhbmdsaW5nIGhvc3QtPnBoeV9kZXYgcG9pbnRl ciB3aGVuIGNhbGxpbmcKcG1fcnVudGltZV9wdXRfc3luYygpPwoKW1NldmVyaXR5OiBIaWdoXQpU aGlzIGlzIGFsc28gYSBwcmUtZXhpc3RpbmcgaXNzdWUsIGJ1dCBpcyB0aGVyZSBhIFBNIHJ1bnRp bWUgdXNhZ2UgY291bnQKbGVhayBpbiB1ZnNfbXRrX3Byb2JlKCkgb24gZXJyb3IgcGF0aHM/CgpJ ZiBhIGZhaWx1cmUgb2NjdXJzIGR1cmluZyBpbml0aWFsaXphdGlvbiAoZS5nLiwgdWZzaGNkX3Bs dGZybV9pbml0KCkgZmFpbHMpLAp0aGUgZnVuY3Rpb24ganVtcHMgdG8gdGhlIG91dCBsYWJlbCB3 aXRob3V0IGNhbGxpbmcgcG1fcnVudGltZV9wdXRfc3luYygpIG9yCnBtX3J1bnRpbWVfZGlzYWJs ZSgpIGZvciBwaHlfZGV2OgoKZHJpdmVycy91ZnMvaG9zdC91ZnMtbWVkaWF0ZWsuYzp1ZnNfbXRr X3Byb2JlKCkgewoJaWYgKHBoeV9ub2RlKSB7CgkJLi4uCgkJcG1fcnVudGltZV9lbmFibGUocGh5 X2Rldik7CgkJcG1fcnVudGltZV9nZXRfc3luYyhwaHlfZGV2KTsKCQkuLi4KCX0KCS4uLgoJZXJy ID0gdWZzaGNkX3BsdGZybV9pbml0KHBkZXYsICZ1ZnNfaGJhX210a192b3BzKTsKCWlmIChlcnIp CgkJZ290byBvdXQ7CgkuLi4Kb3V0OgoJb2Zfbm9kZV9wdXQocGh5X25vZGUpOwoJcmV0dXJuIGVy cjsKfQoKQWRkaXRpb25hbGx5LCB1ZnNfbXRrX3JlbW92ZSgpIGRvZXNuJ3QgYXBwZWFyIHRvIHRl YXIgZG93biB0aGlzIHN0YXRlLgoKLS0gClNhc2hpa28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vc2Fz aGlrby5kZXYvIy9wYXRjaHNldC8yMDI2MDczMC1tdDgxOTYtdWZzLXYxMC0wLWJjNWVjZWYyMDJk Y0Bjb2xsYWJvcmEuY29tP3BhcnQ9MTEKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4 LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=