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 202092D77F7 for ; Tue, 30 Jun 2026 13:41:49 +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=1782826913; cv=none; b=adehWY6Voksz4hhz5ltoPrcuA0demLexBAKVke5i/N6Vo/06tcT17f3XuVmVcW7TKCNLdQzJPLHyMgc7ZDyAs/u60X5z3Wj2Yd4/Fc8Rogs6SqNyJXoSmVSyiNsIC6SKHM+kydJ3nzj/pLjLb1KJI0WnqJl7IapbnnYdUboVlE4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782826913; c=relaxed/simple; bh=PBdx3sj5SkW7uWPqajrIGFWXTaQpm008M5XXujVLFpM=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=MQbQ5E9A197JQWkB5E/25zZUmQAfua4giFg7jXVysT0KMpK1+phGdde0PWQeNfiatlANDGd9YxTx40JG79WwLgP58rSNip8W4ACBnCKLrh5ybsXF0ybjcKcIjf4QxSuKhKDKBnhCjdOE1wsu7QQEB4CGpV9Y7qJbpmMlv+6Gjh4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HXsjGdOS; 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="HXsjGdOS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C281F1F000E9; Tue, 30 Jun 2026 13:41:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782826909; bh=Palvpsq54orTOkoIHQNXkOYPIU/0IL5CFdgkcfHTJmc=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=HXsjGdOSuq3k0gCQf8hVzEQtKJhBWdRP0UvtFDYg/6JTW/Mnzt7NwmfxINUb9fO8H u4U8bl/ZwqjUK4CI0r6p9MB+Nh0BheSicvfMmtgx+caHzJXolwNjAwoG8Frm2SJe0o TZUrWi3Oftn7YjLBa10Eo50KA5koi8CgwcmHjL5lAMisQPicxjgzu7D2zjVrvP9kUw V9ww/7P6rbB1HoyYkgRD+YgIRDUWVzbwFuYv5eaEJ+2r7AlZJTUXP6TwvxEuSbL5bC URXPPlWQBRKfYZeeVSQn1IJzbR6Y4MdyoAFeZx/jLTB0hB/DZavCB23N2Q55fbmYBS 3crCaE3SiNYCg== From: sashiko-bot@kernel.org Subject: Re: [PATCH v4 3/3] i3c: master: Validate GET CCC payload length and retry Direct GET once Reply-To: sashiko-reviews@lists.linux.dev To: tze.yee.ng@altera.com Cc: linux-i3c@lists.infradead.org, Frank.Li@kernel.org, imx@lists.linux.dev In-Reply-To: <1bc55d123df33e2e66ad58ccbc17ba20f74999fe.1782824628.git.tze.yee.ng@altera.com> References: <1bc55d123df33e2e66ad58ccbc17ba20f74999fe.1782824628.git.tze.yee.ng@altera.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Tue, 30 Jun 2026 13:41:48 +0000 Message-Id: <20260630134148.C281F1F000E9@smtp.kernel.org> Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 3 potential issue(= s) to consider: - [High] The Renesas I3C driver fails to set `rx_count` on completion, forc= ing `actual_len` to 0 and failing all GET CCC validations - [Low] Dead code in `i3c_master_getstatus_locked()` due to missed update f= rom `len` to `actual_len` - [Low] The payload validation function evaluates a mathematically impossib= le and redundant condition -- commit 3c7b45c2572b29be23202a83e0e0241b82a602bb Author: Adrian Ng Ho Yin i3c: master: Validate GET CCC payload length and retry Direct GET once This commit adds optional_bytes to struct i3c_ccc_cmd_payload to describe variable-length GET CCC responses and validates payload lengths in i3c_master_send_ccc_cmd_locked(). It also retries failed Direct GET CCCs and updates I3C master drivers to set actual_len on successful GET transfer= s. > diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c > index f1be38a640ca1..5741c3f80ed58 100644 > --- a/drivers/i3c/master.c > +++ b/drivers/i3c/master.c [ ... ] > +static int i3c_ccc_validate_payload_len(struct i3c_ccc_cmd *cmd) > +{ > + unsigned int i; > + > + if (!cmd->rnw) > + return 0; > + > + for (i =3D 0; i < cmd->ndests; i++) { > + struct i3c_ccc_cmd_payload *p =3D &cmd->dests[i].payload; > + u16 min_len; > + > + if (p->optional_bytes > p->len) > + return -EINVAL; > + > + if (p->actual_len > p->len) > + return -EIO; > + > + if (!p->len) > + continue; > + > + min_len =3D p->len - p->optional_bytes; > + if (p->actual_len < min_len || > + (!p->optional_bytes && p->actual_len !=3D p->len)) > + return -EIO; > + } > + > + return 0; > +} [Severity: Low] Does this evaluate a redundant condition? Since p->actual_len > p->len is already caught above, when !p->optional_bytes is true, min_len equals p->len. The left side of the OR captures all cases where actual_len < len. The right side is only evaluated if actual_len =3D=3D len, making actual_len !=3D p->len always false. > @@ -1409,7 +1473,7 @@ static int i3c_master_getmwl_locked(struct i3c_mast= er_controller *master, > if (ret) > goto out; > =20 > - if (dest.payload.len !=3D sizeof(*mwl)) { > + if (dest.payload.actual_len !=3D sizeof(*mwl)) { > ret =3D -EIO; > goto out; > } [Severity: Low] Was i3c_master_getstatus_locked() missed in these updates? This patch changes drivers to write the received payload length to actual_len instead of modifying len, but i3c_master_getstatus_locked() still checks the unmodified length: drivers/i3c/master.c:i3c_master_getstatus_locked() { ... if (dest.payload.len !=3D sizeof(*getstatus)) { ret =3D -EIO; goto out; } ... } Since len is initialized to sizeof(*getstatus) and is no longer modified by the drivers, does this make the error path unreachable dead code? > diff --git a/drivers/i3c/master/renesas-i3c.c b/drivers/i3c/master/renesa= s-i3c.c > index f39c449922ca2..fec614700843f 100644 > --- a/drivers/i3c/master/renesas-i3c.c > +++ b/drivers/i3c/master/renesas-i3c.c > @@ -805,6 +805,8 @@ static int renesas_i3c_send_ccc_cmd(struct i3c_master= _controller *m, > ret =3D xfer->ret; > if (ret) > ccc->err =3D I3C_ERROR_M2; > + else if (ccc->rnw) > + ccc->dests[0].payload.actual_len =3D cmd->rx_count; > =20 > return ret; > } [Severity: High] Can this cause all GET CCC operations to fail on this hardware? This code assigns cmd->rx_count to actual_len, but it appears cmd->rx_count is never incremented during I3C_INTERNAL_STATE_CONTROLLER_COMMAND_READ. Looking at renesas_i3c_resp_isr(): if (NDBSTLV0_RDBLV(renesas_readl(i3c->regs, NDBSTLV0)) && !cmd->err) bytes_remaining =3D data_len - cmd->rx_count; =20 i3c_readl_fifo(i3c->regs + NTDTBP0, cmd->rx_buf, bytes_remaining); If rx_count remains 0, actual_len will always be 0. Will the new i3c_ccc_validate_payload_len() logic then unconditionally reject the payload with -EIO due to a short read? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/cover.1782824628.gi= t.tze.yee.ng@altera.com?part=3D3 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 ACC20C43458 for ; Tue, 30 Jun 2026 13:41:52 +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=aXDhi6Ekla3AtFp0X8RxctGB8vTqgO640V5qbjpGzN4=; b=UHNhgtt5uwCU4z AAGtGndp4uqMfdbbrdjxB26sOhgbo4CfIVyoBYa0ipbpn7O/o1x5LVr2mgqhOSG8C7KycsUXAlYrr QZEBTusDEgSUE3LEnAGiYL2Z0Y2LmiCHTa8OPtx/INDGfVWAaCM8vCloBhjOYvVRb1/t+xhKBY0ri +735zOI+uksXsdiodzlvDPVeoGJXV67w9VaxH2EerttIods8TB0VH4Yo68zaCduUeFmE/rR9ZPh4F 8EHDCBmaGEIJFYWCiW07HmlA8ejLFn+8CIVAZ/uh7SCqP0pDRWhCobb6uOHVODyidhG1hKBAhh5EH Bdj/uNgK479XHpqENgrw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1weYil-0000000HBm4-1gMw; Tue, 30 Jun 2026 13:41:52 +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 1weYik-0000000HBln-0BlE for linux-i3c@lists.infradead.org; Tue, 30 Jun 2026 13:41:50 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 50DE4601C1; Tue, 30 Jun 2026 13:41:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C281F1F000E9; Tue, 30 Jun 2026 13:41:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782826909; bh=Palvpsq54orTOkoIHQNXkOYPIU/0IL5CFdgkcfHTJmc=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=HXsjGdOSuq3k0gCQf8hVzEQtKJhBWdRP0UvtFDYg/6JTW/Mnzt7NwmfxINUb9fO8H u4U8bl/ZwqjUK4CI0r6p9MB+Nh0BheSicvfMmtgx+caHzJXolwNjAwoG8Frm2SJe0o TZUrWi3Oftn7YjLBa10Eo50KA5koi8CgwcmHjL5lAMisQPicxjgzu7D2zjVrvP9kUw V9ww/7P6rbB1HoyYkgRD+YgIRDUWVzbwFuYv5eaEJ+2r7AlZJTUXP6TwvxEuSbL5bC URXPPlWQBRKfYZeeVSQn1IJzbR6Y4MdyoAFeZx/jLTB0hB/DZavCB23N2Q55fbmYBS 3crCaE3SiNYCg== From: sashiko-bot@kernel.org Subject: Re: [PATCH v4 3/3] i3c: master: Validate GET CCC payload length and retry Direct GET once To: tze.yee.ng@altera.com Cc: linux-i3c@lists.infradead.org, Frank.Li@kernel.org, imx@lists.linux.dev In-Reply-To: <1bc55d123df33e2e66ad58ccbc17ba20f74999fe.1782824628.git.tze.yee.ng@altera.com> References: <1bc55d123df33e2e66ad58ccbc17ba20f74999fe.1782824628.git.tze.yee.ng@altera.com> Date: Tue, 30 Jun 2026 13:41:48 +0000 Message-Id: <20260630134148.C281F1F000E9@smtp.kernel.org> X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: 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-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIFRoZSBSZW5lc2FzIEkz QyBkcml2ZXIgZmFpbHMgdG8gc2V0IGByeF9jb3VudGAgb24gY29tcGxldGlvbiwgZm9yY2luZyBg YWN0dWFsX2xlbmAgdG8gMCBhbmQgZmFpbGluZyBhbGwgR0VUIENDQyB2YWxpZGF0aW9ucwotIFtM b3ddIERlYWQgY29kZSBpbiBgaTNjX21hc3Rlcl9nZXRzdGF0dXNfbG9ja2VkKClgIGR1ZSB0byBt aXNzZWQgdXBkYXRlIGZyb20gYGxlbmAgdG8gYGFjdHVhbF9sZW5gCi0gW0xvd10gVGhlIHBheWxv YWQgdmFsaWRhdGlvbiBmdW5jdGlvbiBldmFsdWF0ZXMgYSBtYXRoZW1hdGljYWxseSBpbXBvc3Np YmxlIGFuZCByZWR1bmRhbnQgY29uZGl0aW9uCi0tCgpjb21taXQgM2M3YjQ1YzI1NzJiMjliZTIz MjAyYTgzZTBlMDI0MWI4MmE2MDJiYgpBdXRob3I6IEFkcmlhbiBOZyBIbyBZaW4gPGFkcmlhbi5o by55aW4ubmdAYWx0ZXJhLmNvbT4KCmkzYzogbWFzdGVyOiBWYWxpZGF0ZSBHRVQgQ0NDIHBheWxv YWQgbGVuZ3RoIGFuZCByZXRyeSBEaXJlY3QgR0VUIG9uY2UKClRoaXMgY29tbWl0IGFkZHMgb3B0 aW9uYWxfYnl0ZXMgdG8gc3RydWN0IGkzY19jY2NfY21kX3BheWxvYWQgdG8gZGVzY3JpYmUKdmFy aWFibGUtbGVuZ3RoIEdFVCBDQ0MgcmVzcG9uc2VzIGFuZCB2YWxpZGF0ZXMgcGF5bG9hZCBsZW5n dGhzIGluCmkzY19tYXN0ZXJfc2VuZF9jY2NfY21kX2xvY2tlZCgpLiBJdCBhbHNvIHJldHJpZXMg ZmFpbGVkIERpcmVjdCBHRVQgQ0NDcwphbmQgdXBkYXRlcyBJM0MgbWFzdGVyIGRyaXZlcnMgdG8g c2V0IGFjdHVhbF9sZW4gb24gc3VjY2Vzc2Z1bCBHRVQgdHJhbnNmZXJzLgoKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9pM2MvbWFzdGVyLmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIuYwo+IGluZGV4IGYx YmUzOGE2NDBjYTEuLjU3NDFjM2Y4MGVkNTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9pM2MvbWFz dGVyLmMKPiArKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIuYwoKWyAuLi4gXQoKPiArc3RhdGljIGlu dCBpM2NfY2NjX3ZhbGlkYXRlX3BheWxvYWRfbGVuKHN0cnVjdCBpM2NfY2NjX2NtZCAqY21kKQo+ ICt7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlpZiAoIWNtZC0+cm53KQo+ICsJCXJldHVy biAwOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBjbWQtPm5kZXN0czsgaSsrKSB7Cj4gKwkJc3Ry dWN0IGkzY19jY2NfY21kX3BheWxvYWQgKnAgPSAmY21kLT5kZXN0c1tpXS5wYXlsb2FkOwo+ICsJ CXUxNiBtaW5fbGVuOwo+ICsKPiArCQlpZiAocC0+b3B0aW9uYWxfYnl0ZXMgPiBwLT5sZW4pCj4g KwkJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCQlpZiAocC0+YWN0dWFsX2xlbiA+IHAtPmxlbikK PiArCQkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJCWlmICghcC0+bGVuKQo+ICsJCQljb250aW51ZTsK PiArCj4gKwkJbWluX2xlbiA9IHAtPmxlbiAtIHAtPm9wdGlvbmFsX2J5dGVzOwo+ICsJCWlmIChw LT5hY3R1YWxfbGVuIDwgbWluX2xlbiB8fAo+ICsJCSAgICAoIXAtPm9wdGlvbmFsX2J5dGVzICYm IHAtPmFjdHVhbF9sZW4gIT0gcC0+bGVuKSkKPiArCQkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KCltTZXZlcml0eTogTG93XQpEb2VzIHRoaXMgZXZhbHVhdGUgYSBy ZWR1bmRhbnQgY29uZGl0aW9uPyBTaW5jZSBwLT5hY3R1YWxfbGVuID4gcC0+bGVuIGlzCmFscmVh ZHkgY2F1Z2h0IGFib3ZlLCB3aGVuICFwLT5vcHRpb25hbF9ieXRlcyBpcyB0cnVlLCBtaW5fbGVu IGVxdWFscwpwLT5sZW4uIFRoZSBsZWZ0IHNpZGUgb2YgdGhlIE9SIGNhcHR1cmVzIGFsbCBjYXNl cyB3aGVyZSBhY3R1YWxfbGVuIDwgbGVuLgpUaGUgcmlnaHQgc2lkZSBpcyBvbmx5IGV2YWx1YXRl ZCBpZiBhY3R1YWxfbGVuID09IGxlbiwgbWFraW5nCmFjdHVhbF9sZW4gIT0gcC0+bGVuIGFsd2F5 cyBmYWxzZS4KCj4gQEAgLTE0MDksNyArMTQ3Myw3IEBAIHN0YXRpYyBpbnQgaTNjX21hc3Rlcl9n ZXRtd2xfbG9ja2VkKHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm1hc3RlciwKPiAgCWlm IChyZXQpCj4gIAkJZ290byBvdXQ7Cj4gIAo+IC0JaWYgKGRlc3QucGF5bG9hZC5sZW4gIT0gc2l6 ZW9mKCptd2wpKSB7Cj4gKwlpZiAoZGVzdC5wYXlsb2FkLmFjdHVhbF9sZW4gIT0gc2l6ZW9mKCpt d2wpKSB7Cj4gIAkJcmV0ID0gLUVJTzsKPiAgCQlnb3RvIG91dDsKPiAgCX0KCltTZXZlcml0eTog TG93XQpXYXMgaTNjX21hc3Rlcl9nZXRzdGF0dXNfbG9ja2VkKCkgbWlzc2VkIGluIHRoZXNlIHVw ZGF0ZXM/CgpUaGlzIHBhdGNoIGNoYW5nZXMgZHJpdmVycyB0byB3cml0ZSB0aGUgcmVjZWl2ZWQg cGF5bG9hZCBsZW5ndGggdG8KYWN0dWFsX2xlbiBpbnN0ZWFkIG9mIG1vZGlmeWluZyBsZW4sIGJ1 dCBpM2NfbWFzdGVyX2dldHN0YXR1c19sb2NrZWQoKQpzdGlsbCBjaGVja3MgdGhlIHVubW9kaWZp ZWQgbGVuZ3RoOgoKZHJpdmVycy9pM2MvbWFzdGVyLmM6aTNjX21hc3Rlcl9nZXRzdGF0dXNfbG9j a2VkKCkgewogICAgLi4uCiAgICBpZiAoZGVzdC5wYXlsb2FkLmxlbiAhPSBzaXplb2YoKmdldHN0 YXR1cykpIHsKICAgICAgICByZXQgPSAtRUlPOwogICAgICAgIGdvdG8gb3V0OwogICAgfQogICAg Li4uCn0KClNpbmNlIGxlbiBpcyBpbml0aWFsaXplZCB0byBzaXplb2YoKmdldHN0YXR1cykgYW5k IGlzIG5vIGxvbmdlciBtb2RpZmllZApieSB0aGUgZHJpdmVycywgZG9lcyB0aGlzIG1ha2UgdGhl IGVycm9yIHBhdGggdW5yZWFjaGFibGUgZGVhZCBjb2RlPwoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pM2MvbWFzdGVyL3JlbmVzYXMtaTNjLmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvcmVuZXNhcy1p M2MuYwo+IGluZGV4IGYzOWM0NDk5MjJjYTIuLmZlYzYxNDcwMDg0M2YgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9pM2MvbWFzdGVyL3JlbmVzYXMtaTNjLmMKPiArKysgYi9kcml2ZXJzL2kzYy9tYXN0 ZXIvcmVuZXNhcy1pM2MuYwo+IEBAIC04MDUsNiArODA1LDggQEAgc3RhdGljIGludCByZW5lc2Fz X2kzY19zZW5kX2NjY19jbWQoc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSwKPiAgCXJl dCA9IHhmZXItPnJldDsKPiAgCWlmIChyZXQpCj4gIAkJY2NjLT5lcnIgPSBJM0NfRVJST1JfTTI7 Cj4gKwllbHNlIGlmIChjY2MtPnJudykKPiArCQljY2MtPmRlc3RzWzBdLnBheWxvYWQuYWN0dWFs X2xlbiA9IGNtZC0+cnhfY291bnQ7Cj4gIAo+ICAJcmV0dXJuIHJldDsKPiAgfQoKW1NldmVyaXR5 OiBIaWdoXQpDYW4gdGhpcyBjYXVzZSBhbGwgR0VUIENDQyBvcGVyYXRpb25zIHRvIGZhaWwgb24g dGhpcyBoYXJkd2FyZT8KClRoaXMgY29kZSBhc3NpZ25zIGNtZC0+cnhfY291bnQgdG8gYWN0dWFs X2xlbiwgYnV0IGl0IGFwcGVhcnMKY21kLT5yeF9jb3VudCBpcyBuZXZlciBpbmNyZW1lbnRlZCBk dXJpbmcKSTNDX0lOVEVSTkFMX1NUQVRFX0NPTlRST0xMRVJfQ09NTUFORF9SRUFELgoKTG9va2lu ZyBhdCByZW5lc2FzX2kzY19yZXNwX2lzcigpOgoKICAgIGlmIChOREJTVExWMF9SREJMVihyZW5l c2FzX3JlYWRsKGkzYy0+cmVncywgTkRCU1RMVjApKSAmJiAhY21kLT5lcnIpCiAgICAgICAgYnl0 ZXNfcmVtYWluaW5nID0gZGF0YV9sZW4gLSBjbWQtPnJ4X2NvdW50OwogICAgCiAgICBpM2NfcmVh ZGxfZmlmbyhpM2MtPnJlZ3MgKyBOVERUQlAwLCBjbWQtPnJ4X2J1ZiwgYnl0ZXNfcmVtYWluaW5n KTsKCklmIHJ4X2NvdW50IHJlbWFpbnMgMCwgYWN0dWFsX2xlbiB3aWxsIGFsd2F5cyBiZSAwLiBX aWxsIHRoZSBuZXcKaTNjX2NjY192YWxpZGF0ZV9wYXlsb2FkX2xlbigpIGxvZ2ljIHRoZW4gdW5j b25kaXRpb25hbGx5IHJlamVjdCB0aGUKcGF5bG9hZCB3aXRoIC1FSU8gZHVlIHRvIGEgc2hvcnQg cmVhZD8KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0 Y2hzZXQvY292ZXIuMTc4MjgyNDYyOC5naXQudHplLnllZS5uZ0BhbHRlcmEuY29tP3BhcnQ9MwoK LS0gCmxpbnV4LWkzYyBtYWlsaW5nIGxpc3QKbGludXgtaTNjQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1pM2MK