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 84CD348DB36 for ; Fri, 16 Oct 2026 18:15:40 +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=1792174542; cv=none; b=t8DY93Q8CfvMuNEIiutcw10oQ2fIBMWrwrfz+3bFHgflUVqNMsYeoVV8OGRaSXX9AEZrwvZ1FQ/EJ2vI5l8+qcLaRcY6Qv0hPgYV11ByUcZTdUxBEkVfiun6t8TJxZ9fohobxSpZJvuLC0kUggNdm6SYu3XrG8N6dA6xSnVUtno= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792174542; c=relaxed/simple; bh=EqXL7OEzIjuS+qpPUMOBDjZGAiXqHj4h+4shjicXH0g=; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type: Date; b=tNnBe0/en0YbIpb6IRdqlm889CnlwiVg1i9jB9XBvvgo5mIOxioKpisEolaH9nlRPfxnDSKR3YhcQXhVIG8GA2xHSC+b3k9/TE4yC8IMswrlFpq4jgkdKGB5bPwKoVECknagJN4XDoD/6JkXLQ9tI/FAzjEl9fB0azRfhbdZ82U= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cctKyv8k; 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="cctKyv8k" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F40CE1F000C8; Fri, 16 Oct 2026 18:15:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792174540; bh=7DRLFNZeCfhDGAvyw/2znK3pXUlxykPmQA/zF6XluF0=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=cctKyv8kkedD+hQ3YPXzsEI5NFOGsun5YrtkJmwKCRmuVeroaRIKMnxszzysoAovq PU/ckF0t6BM7hRrHfytl/xKGpySiAphR1x90r5QPrONNJvVtBZ84DF5YvK35VjYctv B+fQXjQnbqGkZUP0KB/jp5bB5X7tZHg+gRu9PsYBq74OW76sjmKYxs0HtBEVQxRla/ iNxInKIJC4HsNXNu9rWVdulP2cRydcTeKuZzRfXAf8z62ZBUN0lRFzsdBPxmL2wI83 GdZ0eORL7Smbx8dsiP4bdA9Yh7vfHe1/glHTXXZWCE+Z9jcJtVB6A1Yp87HWwRj0TG mnjeYq14BDKow== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v9 1/6] phy: realtek: usb2: introduce phy_reg_desc struct to the driver Reply-To: sashiko-reviews@lists.linux.dev To: "Rustam Adilov" , linux-phy@lists.infradead.org, devicetree@vger.kernel.org Cc: robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261016180314.31760-2-adilov@disroot.org> References: <20261016180314.31760-1-adilov@disroot.org> <20261016180314.31760-2-adilov@disroot.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 16 Oct 2026 18:15:39 +0000 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] usb: phy: unaligned IO pointer arithmetic on void __iomem * - [High] phy: realtek: missing NULL check and iounmap() for of_iomap() - [High] phy: realtek: off-by-one array bounds check allows out-of-bounds a= ccess -- commit a5449cff40ee54bc6f98436955a56c20a0155c71 Author: Rustam Adilov phy: realtek: usb2: introduce phy_reg_desc struct to the driver In RTL9607C SoC, there are a few differences in usb2 phy compared to existing RTD SoCs, like vstatus register is at certain offset from the base, busy bit and new_reg_req bit are at different bits of the register. To avoid duplicating these variables across phy cfg and driver data, create a per-SoC struct that would hold them and with that add the default rtd_phy_reg_desc to which all RTD SoCs driver data will point towards. > diff --git a/drivers/phy/realtek/phy-rtk-usb2.c b/drivers/phy/realtek/phy= -rtk-usb2.c > index 248550ef98cab..e8d0f0119ec0a 100644 > --- a/drivers/phy/realtek/phy-rtk-usb2.c > +++ b/drivers/phy/realtek/phy-rtk-usb2.c > @@ -156,27 +164,28 @@ static inline int utmi_wait_register(void __iomem *= reg, u32 mask, u32 result) > static char rtk_phy_read(struct phy_reg *phy_reg, char addr) > { > void __iomem *reg_gusb2phyacc0 =3D phy_reg->reg_gusb2phyacc0; > + const struct phy_reg_desc *reg_desc =3D phy_reg->desc; > unsigned int val; > int ret =3D 0; > =20 > addr -=3D OFFEST_PHY_READ; > =20 > /* polling until VBusy =3D=3D 0 */ > - ret =3D utmi_wait_register(reg_gusb2phyacc0, PHY_VSTS_BUSY, 0); > + ret =3D utmi_wait_register(reg_gusb2phyacc0, reg_desc->vstatus_busy, 0); [Severity: High] Can this dereference an out-of-bounds array element? In rtk_phy_toggle(), the bounds check uses > instead of >=3D: if (index > rtk_phy->num_phy) { This incorrectly allows index to equal the array size num_phy. When do_rtk_phy_toggle() uses this out-of-bounds index to access the dynamically allocated phy_parameter array, an invalid phy_reg element is passed to rtk_phy_read(). Dereferencing the explicitly added desc pointer from this invalid phy_reg element will immediately cause a NULL pointer dereference or memory corrupt= ion. [ ... ] > @@ -957,6 +968,7 @@ static int get_phy_data_by_efuse(struct rtk_phy *rtk_= phy, > =20 > static int parse_phy_data(struct rtk_phy *rtk_phy) > { > + struct phy_cfg *phy_cfg =3D rtk_phy->phy_cfg; > struct device *dev =3D rtk_phy->dev; > struct device_node *np =3D dev->of_node; > struct phy_parameter *phy_parameter; > @@ -974,6 +986,8 @@ static int parse_phy_data(struct rtk_phy *rtk_phy) > phy_parameter->phy_reg.reg_wrap_vstatus =3D of_iomap(np, 0); > phy_parameter->phy_reg.reg_gusb2phyacc0 =3D of_iomap(np, 1) + index; [Severity: High] Does this code handle of_iomap() failures correctly? of_iomap() can return NULL. The driver fails to check this return value and proceeds, which can cause a NULL pointer dereference later when reg_wrap_vstatus is offset and dereferenced in rtk_phy_write(). Additionally, this maps the exact same indices (0 and 1) redundantly in a loop up to num_phy times, which may leak I/O memory if mapped multiple time= s. [Severity: High] Does this pointer arithmetic result in an unaligned pointer? Adding index to the void __iomem * returned by of_iomap(np, 1) increments t= he address by exactly index bytes (e.g. 1 byte for the second PHY in a dual-po= rt configuration). This creates an unaligned I/O pointer. Executing a 32-bit I/O access on this unaligned pointer in rtk_phy_write() can cause a hardware Alignment Fault. > phy_parameter->phy_reg.vstatus_index =3D index; > + phy_parameter->phy_reg.desc =3D phy_cfg->reg_desc; > + > =20 > if (of_property_read_bool(np, "realtek,inverse-hstx-sync-clock")) > phy_parameter->inverse_hstx_sync_clock =3D true; [ ... ] > @@ -1060,6 +1074,12 @@ static void rtk_usb2phy_remove(struct platform_dev= ice *pdev) > remove_debug_files(rtk_phy); > } [Severity: High] Does this missing cleanup cause an I/O memory leak? The teardown function completes without calling iounmap() for the regions mapped by of_iomap() in parse_phy_data(), resulting in a permanent I/O memo= ry leak on driver removal. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261016180314.3176= 0-1-adilov@disroot.org?part=3D1 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 CD928CC6B38 for ; Fri, 16 Oct 2026 18:15:42 +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:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tHWb0oNNcb0Yc0dpLtnw/5br85cLaHMkuEK+1UcwBtc=; b=zWEuPYbB+B6EQS d/a7eSSgB4ufgdxJ5+5CwJve41ECj6FIg7Bybl8WX2bN0paUlzpzZJkFn7LBgspxS66tLO2bBowHG woQSf5G20zqJ5mGzApqP21g25y0QCBPng+NtPaScFFhjVftw7HgEvdviJDOd6vqqVEzztwIegBqTo q0K/l2JgZO1Gotuxl4TWGWoLUyHsWURrGNjpNKiA3GuNxPux1Cx6qqo9xeJKG8/RVtmbLmvvbKb2O 64VKlfjEBEqBPJEtSm0pOcoJqNbRIHmZsX1yQfSKUgaC8fdfYLiDKc4nZSiHnHyZ83z2XgYWIZ3gY E6KCjzTgQStAdqCLgSKw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xHmT0-00000003dda-1Rya; Fri, 16 Oct 2026 18:15:42 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xHmSz-00000003ddR-1x1x for linux-phy@lists.infradead.org; Fri, 16 Oct 2026 18:15:41 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id B0DCF60A9D; Fri, 16 Oct 2026 18:15:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F40CE1F000C8; Fri, 16 Oct 2026 18:15:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792174540; bh=7DRLFNZeCfhDGAvyw/2znK3pXUlxykPmQA/zF6XluF0=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=cctKyv8kkedD+hQ3YPXzsEI5NFOGsun5YrtkJmwKCRmuVeroaRIKMnxszzysoAovq PU/ckF0t6BM7hRrHfytl/xKGpySiAphR1x90r5QPrONNJvVtBZ84DF5YvK35VjYctv B+fQXjQnbqGkZUP0KB/jp5bB5X7tZHg+gRu9PsYBq74OW76sjmKYxs0HtBEVQxRla/ iNxInKIJC4HsNXNu9rWVdulP2cRydcTeKuZzRfXAf8z62ZBUN0lRFzsdBPxmL2wI83 GdZ0eORL7Smbx8dsiP4bdA9Yh7vfHe1/glHTXXZWCE+Z9jcJtVB6A1Yp87HWwRj0TG mnjeYq14BDKow== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v9 1/6] phy: realtek: usb2: introduce phy_reg_desc struct to the driver To: "Rustam Adilov" , linux-phy@lists.infradead.org, devicetree@vger.kernel.org Cc: robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261016180314.31760-2-adilov@disroot.org> References: <20261016180314.31760-1-adilov@disroot.org> <20261016180314.31760-2-adilov@disroot.org> Date: Fri, 16 Oct 2026 18:15:39 +0000 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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIHVzYjogcGh5OiB1bmFs aWduZWQgSU8gcG9pbnRlciBhcml0aG1ldGljIG9uIHZvaWQgX19pb21lbSAqCi0gW0hpZ2hdIHBo eTogcmVhbHRlazogbWlzc2luZyBOVUxMIGNoZWNrIGFuZCBpb3VubWFwKCkgZm9yIG9mX2lvbWFw KCkKLSBbSGlnaF0gcGh5OiByZWFsdGVrOiBvZmYtYnktb25lIGFycmF5IGJvdW5kcyBjaGVjayBh bGxvd3Mgb3V0LW9mLWJvdW5kcyBhY2Nlc3MKLS0KCmNvbW1pdCBhNTQ0OWNmZjQwZWU1NGJjNmY5 ODQzNjk1NWE1NmMyMGEwMTU1YzcxCkF1dGhvcjogUnVzdGFtIEFkaWxvdiA8YWRpbG92QGRpc3Jv b3Qub3JnPgoKcGh5OiByZWFsdGVrOiB1c2IyOiBpbnRyb2R1Y2UgcGh5X3JlZ19kZXNjIHN0cnVj dCB0byB0aGUgZHJpdmVyCgpJbiBSVEw5NjA3QyBTb0MsIHRoZXJlIGFyZSBhIGZldyBkaWZmZXJl bmNlcyBpbiB1c2IyIHBoeSBjb21wYXJlZAp0byBleGlzdGluZyBSVEQgU29DcywgbGlrZSB2c3Rh dHVzIHJlZ2lzdGVyIGlzIGF0IGNlcnRhaW4gb2Zmc2V0CmZyb20gdGhlIGJhc2UsIGJ1c3kgYml0 IGFuZCBuZXdfcmVnX3JlcSBiaXQgYXJlIGF0IGRpZmZlcmVudCBiaXRzCm9mIHRoZSByZWdpc3Rl ci4KClRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoZXNlIHZhcmlhYmxlcyBhY3Jvc3MgcGh5IGNmZyBh bmQgZHJpdmVyIGRhdGEsCmNyZWF0ZSBhIHBlci1Tb0Mgc3RydWN0IHRoYXQgd291bGQgaG9sZCB0 aGVtIGFuZCB3aXRoIHRoYXQgYWRkIHRoZQpkZWZhdWx0IHJ0ZF9waHlfcmVnX2Rlc2MgdG8gd2hp Y2ggYWxsIFJURCBTb0NzIGRyaXZlciBkYXRhIHdpbGwKcG9pbnQgdG93YXJkcy4KCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGh5L3JlYWx0ZWsvcGh5LXJ0ay11c2IyLmMgYi9kcml2ZXJzL3BoeS9y ZWFsdGVrL3BoeS1ydGstdXNiMi5jCj4gaW5kZXggMjQ4NTUwZWY5OGNhYi4uZThkMGYwMTE5ZWMw YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BoeS9yZWFsdGVrL3BoeS1ydGstdXNiMi5jCj4gKysr IGIvZHJpdmVycy9waHkvcmVhbHRlay9waHktcnRrLXVzYjIuYwo+IEBAIC0xNTYsMjcgKzE2NCwy OCBAQCBzdGF0aWMgaW5saW5lIGludCB1dG1pX3dhaXRfcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpy ZWcsIHUzMiBtYXNrLCB1MzIgcmVzdWx0KQo+ICBzdGF0aWMgY2hhciBydGtfcGh5X3JlYWQoc3Ry dWN0IHBoeV9yZWcgKnBoeV9yZWcsIGNoYXIgYWRkcikKPiAgewo+ICAJdm9pZCBfX2lvbWVtICpy ZWdfZ3VzYjJwaHlhY2MwID0gcGh5X3JlZy0+cmVnX2d1c2IycGh5YWNjMDsKPiArCWNvbnN0IHN0 cnVjdCBwaHlfcmVnX2Rlc2MgKnJlZ19kZXNjID0gcGh5X3JlZy0+ZGVzYzsKPiAgCXVuc2lnbmVk IGludCB2YWw7Cj4gIAlpbnQgcmV0ID0gMDsKPiAgCj4gIAlhZGRyIC09IE9GRkVTVF9QSFlfUkVB RDsKPiAgCj4gIAkvKiBwb2xsaW5nIHVudGlsIFZCdXN5ID09IDAgKi8KPiAtCXJldCA9IHV0bWlf d2FpdF9yZWdpc3RlcihyZWdfZ3VzYjJwaHlhY2MwLCBQSFlfVlNUU19CVVNZLCAwKTsKPiArCXJl dCA9IHV0bWlfd2FpdF9yZWdpc3RlcihyZWdfZ3VzYjJwaHlhY2MwLCByZWdfZGVzYy0+dnN0YXR1 c19idXN5LCAwKTsKCltTZXZlcml0eTogSGlnaF0KQ2FuIHRoaXMgZGVyZWZlcmVuY2UgYW4gb3V0 LW9mLWJvdW5kcyBhcnJheSBlbGVtZW50PwoKSW4gcnRrX3BoeV90b2dnbGUoKSwgdGhlIGJvdW5k cyBjaGVjayB1c2VzID4gaW5zdGVhZCBvZiA+PToKCiAgICBpZiAoaW5kZXggPiBydGtfcGh5LT5u dW1fcGh5KSB7CgpUaGlzIGluY29ycmVjdGx5IGFsbG93cyBpbmRleCB0byBlcXVhbCB0aGUgYXJy YXkgc2l6ZSBudW1fcGh5LiBXaGVuCmRvX3J0a19waHlfdG9nZ2xlKCkgdXNlcyB0aGlzIG91dC1v Zi1ib3VuZHMgaW5kZXggdG8gYWNjZXNzIHRoZSBkeW5hbWljYWxseQphbGxvY2F0ZWQgcGh5X3Bh cmFtZXRlciBhcnJheSwgYW4gaW52YWxpZCBwaHlfcmVnIGVsZW1lbnQgaXMgcGFzc2VkIHRvCnJ0 a19waHlfcmVhZCgpLgoKRGVyZWZlcmVuY2luZyB0aGUgZXhwbGljaXRseSBhZGRlZCBkZXNjIHBv aW50ZXIgZnJvbSB0aGlzIGludmFsaWQgcGh5X3JlZwplbGVtZW50IHdpbGwgaW1tZWRpYXRlbHkg Y2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbWVtb3J5IGNvcnJ1cHRpb24uCgpb IC4uLiBdCgo+IEBAIC05NTcsNiArOTY4LDcgQEAgc3RhdGljIGludCBnZXRfcGh5X2RhdGFfYnlf ZWZ1c2Uoc3RydWN0IHJ0a19waHkgKnJ0a19waHksCj4gIAo+ICBzdGF0aWMgaW50IHBhcnNlX3Bo eV9kYXRhKHN0cnVjdCBydGtfcGh5ICpydGtfcGh5KQo+ICB7Cj4gKwlzdHJ1Y3QgcGh5X2NmZyAq cGh5X2NmZyA9IHJ0a19waHktPnBoeV9jZmc7Cj4gIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBydGtf cGh5LT5kZXY7Cj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwo+ICAJ c3RydWN0IHBoeV9wYXJhbWV0ZXIgKnBoeV9wYXJhbWV0ZXI7Cj4gQEAgLTk3NCw2ICs5ODYsOCBA QCBzdGF0aWMgaW50IHBhcnNlX3BoeV9kYXRhKHN0cnVjdCBydGtfcGh5ICpydGtfcGh5KQo+ICAJ CXBoeV9wYXJhbWV0ZXItPnBoeV9yZWcucmVnX3dyYXBfdnN0YXR1cyA9IG9mX2lvbWFwKG5wLCAw KTsKPiAgCQlwaHlfcGFyYW1ldGVyLT5waHlfcmVnLnJlZ19ndXNiMnBoeWFjYzAgPSBvZl9pb21h cChucCwgMSkgKyBpbmRleDsKCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIGNvZGUgaGFuZGxl IG9mX2lvbWFwKCkgZmFpbHVyZXMgY29ycmVjdGx5PwoKb2ZfaW9tYXAoKSBjYW4gcmV0dXJuIE5V TEwuIFRoZSBkcml2ZXIgZmFpbHMgdG8gY2hlY2sgdGhpcyByZXR1cm4gdmFsdWUgYW5kCnByb2Nl ZWRzLCB3aGljaCBjYW4gY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgbGF0ZXIgd2hl bgpyZWdfd3JhcF92c3RhdHVzIGlzIG9mZnNldCBhbmQgZGVyZWZlcmVuY2VkIGluIHJ0a19waHlf d3JpdGUoKS4KCkFkZGl0aW9uYWxseSwgdGhpcyBtYXBzIHRoZSBleGFjdCBzYW1lIGluZGljZXMg KDAgYW5kIDEpIHJlZHVuZGFudGx5IGluIGEKbG9vcCB1cCB0byBudW1fcGh5IHRpbWVzLCB3aGlj aCBtYXkgbGVhayBJL08gbWVtb3J5IGlmIG1hcHBlZCBtdWx0aXBsZSB0aW1lcy4KCltTZXZlcml0 eTogSGlnaF0KRG9lcyB0aGlzIHBvaW50ZXIgYXJpdGhtZXRpYyByZXN1bHQgaW4gYW4gdW5hbGln bmVkIHBvaW50ZXI/CgpBZGRpbmcgaW5kZXggdG8gdGhlIHZvaWQgX19pb21lbSAqIHJldHVybmVk IGJ5IG9mX2lvbWFwKG5wLCAxKSBpbmNyZW1lbnRzIHRoZQphZGRyZXNzIGJ5IGV4YWN0bHkgaW5k ZXggYnl0ZXMgKGUuZy4gMSBieXRlIGZvciB0aGUgc2Vjb25kIFBIWSBpbiBhIGR1YWwtcG9ydApj b25maWd1cmF0aW9uKS4gVGhpcyBjcmVhdGVzIGFuIHVuYWxpZ25lZCBJL08gcG9pbnRlci4KCkV4 ZWN1dGluZyBhIDMyLWJpdCBJL08gYWNjZXNzIG9uIHRoaXMgdW5hbGlnbmVkIHBvaW50ZXIgaW4g cnRrX3BoeV93cml0ZSgpCmNhbiBjYXVzZSBhIGhhcmR3YXJlIEFsaWdubWVudCBGYXVsdC4KCj4g IAkJcGh5X3BhcmFtZXRlci0+cGh5X3JlZy52c3RhdHVzX2luZGV4ID0gaW5kZXg7Cj4gKwkJcGh5 X3BhcmFtZXRlci0+cGh5X3JlZy5kZXNjID0gcGh5X2NmZy0+cmVnX2Rlc2M7Cj4gKwo+ICAKPiAg CQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAicmVhbHRlayxpbnZlcnNlLWhzdHgtc3lu Yy1jbG9jayIpKQo+ICAJCQlwaHlfcGFyYW1ldGVyLT5pbnZlcnNlX2hzdHhfc3luY19jbG9jayA9 IHRydWU7CgpbIC4uLiBdCgo+IEBAIC0xMDYwLDYgKzEwNzQsMTIgQEAgc3RhdGljIHZvaWQgcnRr X3VzYjJwaHlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAlyZW1vdmVf ZGVidWdfZmlsZXMocnRrX3BoeSk7Cj4gIH0KCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIG1p c3NpbmcgY2xlYW51cCBjYXVzZSBhbiBJL08gbWVtb3J5IGxlYWs/CgpUaGUgdGVhcmRvd24gZnVu Y3Rpb24gY29tcGxldGVzIHdpdGhvdXQgY2FsbGluZyBpb3VubWFwKCkgZm9yIHRoZSByZWdpb25z Cm1hcHBlZCBieSBvZl9pb21hcCgpIGluIHBhcnNlX3BoeV9kYXRhKCksIHJlc3VsdGluZyBpbiBh IHBlcm1hbmVudCBJL08gbWVtb3J5CmxlYWsgb24gZHJpdmVyIHJlbW92YWwuCgotLSAKU2FzaGlr byBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMDE2MTgw MzE0LjMxNzYwLTEtYWRpbG92QGRpc3Jvb3Qub3JnP3BhcnQ9MQoKLS0gCmxpbnV4LXBoeSBtYWls aW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==