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 D8E1235BDC7 for ; Tue, 14 Jul 2026 11:31:52 +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=1784028714; cv=none; b=JtO7OA2W2rfqrtb5xLxQoPyT5KZv/zuefvAv9G6dq1OeTJLkh5p6IBKC/IjdiZF3eHyo1mndRjir9eZs8MCtzUK2I7v6DEP0tln8o675EuT9BV0cYYqHgsLrKZtKcVResGoJa7YCxbveu7VM5TOEmXReYU3zbF3pIGPtbmEiD1M= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784028714; c=relaxed/simple; bh=FfOPjnuz7QtdM4YS/c6xrKtzHCqvsdCzBb/9HRmTy4o=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=qOS4YWiDXYmqaoTldwvP+Xf4yNT8EgTR2G5gGeuj4TCXZZUEC43QOzYJEF5aMHIeOhVLSLs3/81HDhcAEYcZyTi2q5KCCRk8a1xx0QMirCI45P8dHgdHM0CuSUspApPGg+wAn9Xk8GdfqgA4T2LJwuuHqSbNiyV47eokaWB/z68= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eJdgzk24; 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="eJdgzk24" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0DE771F000E9; Tue, 14 Jul 2026 11:31:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784028712; bh=QQeoHKLcjTnsjCJVP09/mJ0h3b2GJCBITeElAgPA3k0=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=eJdgzk24p4YXxXPCDdbJygRyBbCuWkpOw2ur6bS4iRtHXJuSCxPKg1TwtrZm8SASZ FycsuVREg81bk817vysadpedV/E+clRyeMoW5xl/qaaKPhzUWBZynyEK08cX7g2F36 ZoG/PzaBcoO14kyKxSL0SE0SNJD6KO6i6Gwu16r4saM7BVhZFoDPGAQ+5Swl1fRHYk 7Xx0auLAab10AxYMvTxjimlLWEVMyZyEhrQ49qGXJUmpVp2d8pVUZJVuSguh2dozY1 kR3KjCTUzipu5zUjRbpNSG07FvyHWeUx/qEaZpvJTx5mZPntweIpqaO/in1UD2gy26 iaIGIlovzLkKQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v14 7/8] i3c: hub: p3h2x4x: Add support for NXP P3H2x4x I3C hub functionality Reply-To: sashiko-reviews@lists.linux.dev To: "Lakshay Piplani" Cc: robh@kernel.org, devicetree@vger.kernel.org, linux-i3c@lists.infradead.org, Frank.Li@kernel.org, conor+dt@kernel.org, "Alexandre Belloni" In-Reply-To: <20260714092053.2461482-8-lakshay.piplani@nxp.com> References: <20260714092053.2461482-1-lakshay.piplani@nxp.com> <20260714092053.2461482-8-lakshay.piplani@nxp.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Tue, 14 Jul 2026 11:31:51 +0000 Message-Id: <20260714113152.0DE771F000E9@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 5 potential issue(= s) to consider: - [High] Child driver illegaly overwrites the parent MFD device's private d= ata, causing type confusion and kernel panics. - [High] The SMBus timeout formula underestimates minimum physical wire tim= e, causing large block transfers to inevitably fail with -ETIMEDOUT. - [High] Target ports configured as "i2c" are left completely disconnected = and functionally dead. - [High] Use-After-Free of device structure embedded in devm-allocated memo= ry during driver unbind. - [Medium] Missing I2C adapter quirks causes undocumented rigid transfer si= ze limits. -- --- Patch [7]: [PATCH v14 7/8] i3c: hub: p3h2x4x: Add support for NXP P3H2x= 4x I3C hub functionality --- commit cfe07c5ef0a917e7757bc31fa34e458df22a78ed Author: Aman Kumar Pandey i3c: hub: p3h2x4x: Add support for NXP P3H2x4x I3C hub functionality Add I3C hub functionality for the NXP P3H2x4x family of multiport hubs. These devices support downstream target ports that can be configured as I3C, I2C, or SMBus. > diff --git a/drivers/i3c/hub/p3h2840_i3c_hub.h b/drivers/i3c/hub/p3h2840_= i3c_hub.h > index 0000000000000..e7ab243bbfff6 > --- /dev/null > +++ b/drivers/i3c/hub/p3h2840_i3c_hub.h [ ... ] > +/* Hub SMBus transaction time */ > +#define P3H2X4X_SMBUS_400kHz_TRANSFER_TIMEOUT(x) ((20 * (x)) + 80) [Severity: High] Is this timeout formula sufficient for large SMBus block transfers? At 400kHz, each 9-bit I2C byte takes 22.5 us. For a 32-byte payload plus a 1-byte address, the minimum physical wire time is 33 * 22.5 =3D 742.5 us. However, the formula 20 * x + 80 allocates only 720 us for a 32-byte payloa= d. If a large payload message is sent, the timeout will trigger in p3h2x4x_read_smbus_transaction_status() before the transfer can complete on the wire, causing it to fail with a timeout. [ ... ] > diff --git a/drivers/i3c/hub/p3h2840_i3c_hub_common.c b/drivers/i3c/hub/p= 3h2840_i3c_hub_common.c > index 0000000000000..2fd9723da60d9 > --- /dev/null > +++ b/drivers/i3c/hub/p3h2840_i3c_hub_common.c [ ... ] > +static int p3h2x4x_i3c_hub_probe(struct platform_device *pdev) > +{ > + struct p3h2x4x *p3h2x4x =3D dev_get_drvdata(pdev->dev.parent); > + struct p3h2x4x_i3c_hub_dev *p3h2x4x_i3c_hub; > + struct device *dev =3D &pdev->dev; > + struct device_node *node; > + int ret, i; > + > + p3h2x4x_i3c_hub =3D devm_kzalloc(dev, sizeof(*p3h2x4x_i3c_hub), GFP_KER= NEL); [Severity: High] Could this lead to a use-after-free during driver unbind? The p3h2x4x_i3c_hub structure is allocated via devm_kzalloc() and contains struct i3c_master_controller instances, which in turn embed struct device. When the devm action calls i3c_master_unregister() on driver unbind, it invokes device_unregister(). Because device_unregister() does not block to wait for all sysfs references to drop, userspace might still hold reference= s. When devm subsequently frees the containing p3h2x4x_i3c_hub_dev structure, accessing those remaining references will cause a use-after-free. > + if (!p3h2x4x_i3c_hub) > + return -ENOMEM; [ ... ] > + /* Register virtual I3C master controllers for I3C target ports */ > + if (p3h2x4x->i3cdev) { > + p3h2x4x_i3c_hub->i3cdev =3D p3h2x4x->i3cdev; > + i3cdev_set_drvdata(p3h2x4x->i3cdev, p3h2x4x_i3c_hub); [Severity: High] Does this code safely manage the parent device's private data? By calling i3cdev_set_drvdata() on p3h2x4x->i3cdev here in p3h2x4x_i3c_hub_probe(), it replaces the MFD parent's drvdata with the child driver's context. If any parent callbacks try to retrieve their data, they will incorrectly cast struct p3h2x4x_i3c_hub_dev to struct p3h2x4x, leading to type confusion and data corruption. > + ret =3D p3h2x4x_tp_i3c_algo(p3h2x4x_i3c_hub); > + if (ret) > + return dev_err_probe(dev, ret, "Failed to register i3c bus\n"); > + } [ ... ] > diff --git a/drivers/i3c/hub/p3h2840_i3c_hub_i3c.c b/drivers/i3c/hub/p3h2= 840_i3c_hub_i3c.c > index 0000000000000..0e5bf7eb3cf7f > --- /dev/null > +++ b/drivers/i3c/hub/p3h2840_i3c_hub_i3c.c [ ... ] > +int p3h2x4x_tp_i3c_algo(struct p3h2x4x_i3c_hub_dev *p3h2x4x_hub) > +{ [ ... ] > + for (tp =3D 0; tp < P3H2X4X_TP_MAX_COUNT; tp++) { > + if (!p3h2x4x_hub->tp_bus[tp].of_node || > + p3h2x4x_hub->hub_config.tp_config[tp].mode !=3D P3H2X4X_TP_MODE_I3= C) > + continue; [Severity: High] Will target ports configured as i2c in the device tree be registered? The p3h2x4x_tp_i3c_algo() function explicitly skips ports unless they are in I3C mode. Similarly, p3h2x4x_tp_smbus_algo() skips ports unless they are in SMBus mode. As a result, ports configured as i2c are ignored entirely and never registered or enabled in the hardware's network configuration mask. > + > + struct i3c_hub_controller *hub_controller =3D > + &p3h2x4x_hub->tp_bus[tp].hub_controller; [ ... ] > diff --git a/drivers/i3c/hub/p3h2840_i3c_hub_smbus.c b/drivers/i3c/hub/p3= h2840_i3c_hub_smbus.c > index 0000000000000..b991c46f3ed59 > --- /dev/null > +++ b/drivers/i3c/hub/p3h2840_i3c_hub_smbus.c [ ... ] > +static s32 p3h2x4x_tp_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg = *msgs, int num) > +{ [ ... ] > + for (msg_count =3D 0; msg_count < num; msg_count++) { > + if (msgs[msg_count].len > P3H2X4X_SMBUS_PAYLOAD_SIZE) { > + dev_err(p3h2x4x_i3c_hub->dev, > + "Message nr. %d not sent - length over %d bytes.\n", > + msg_count, P3H2X4X_SMBUS_PAYLOAD_SIZE); > + return -EINVAL; > + } [Severity: Medium] Would it be better to expose this size limitation to the I2C subsystem? By enforcing a hard boundary here dynamically in p3h2x4x_tp_i2c_xfer() without populating the i2c_adapter_quirks structure, the I2C subsystem cannot automatically split up oversized reads and writes for the client. This will result in unexpected failures for standard transactions that exce= ed 84 bytes. > + > + rw =3D (msgs[msg_count].flags & I2C_M_RD) ? 1 : 0; [ ... ] --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260714092053.2461= 482-1-lakshay.piplani@nxp.com?part=3D7 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 074E2C43458 for ; Tue, 14 Jul 2026 11:31:55 +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=3TkdusqM9qV55sYjM4aCY0h2zjlEUV7xmmlV2TFogyA=; b=h6h592EVN1IVsG 20P6pGujjm2iBkgDdAFnmgxYvBs0NmfN9Jf11Nw7ykfPn58vY0aMmu5a5wigGHcbHd2D7vUOhqwdG WcyuHKaT3gPhR1Nh8PyLUd23v07h5MsngQKtmSPKQgD0FsDVxHXTTX00og4aapVp+zJBJJyo7XFfJ 7v3sezgkGbkExh7m+RlUsge2rczbfMsJa6SqPEWqF3lf9xlnMS4o8I4MEXMkmykxif6SoDfqzMCDt E9BoQN2WFSF+Py2ip62xe5iVyvvIOT11UO+8ygcOHcFDtIOmlIbO59bWQ3jLvMTKr12aaHEs05Szb 8/p34OGhFImN6A1kM8Og==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wjbMg-0000000Bgrp-31LF; Tue, 14 Jul 2026 11:31:54 +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 1wjbMf-0000000BgrI-26r7 for linux-i3c@lists.infradead.org; Tue, 14 Jul 2026 11:31:53 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id BBB2D60120; Tue, 14 Jul 2026 11:31:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0DE771F000E9; Tue, 14 Jul 2026 11:31:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784028712; bh=QQeoHKLcjTnsjCJVP09/mJ0h3b2GJCBITeElAgPA3k0=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=eJdgzk24p4YXxXPCDdbJygRyBbCuWkpOw2ur6bS4iRtHXJuSCxPKg1TwtrZm8SASZ FycsuVREg81bk817vysadpedV/E+clRyeMoW5xl/qaaKPhzUWBZynyEK08cX7g2F36 ZoG/PzaBcoO14kyKxSL0SE0SNJD6KO6i6Gwu16r4saM7BVhZFoDPGAQ+5Swl1fRHYk 7Xx0auLAab10AxYMvTxjimlLWEVMyZyEhrQ49qGXJUmpVp2d8pVUZJVuSguh2dozY1 kR3KjCTUzipu5zUjRbpNSG07FvyHWeUx/qEaZpvJTx5mZPntweIpqaO/in1UD2gy26 iaIGIlovzLkKQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v14 7/8] i3c: hub: p3h2x4x: Add support for NXP P3H2x4x I3C hub functionality To: "Lakshay Piplani" Cc: robh@kernel.org, devicetree@vger.kernel.org, linux-i3c@lists.infradead.org, Frank.Li@kernel.org, conor+dt@kernel.org, "Alexandre Belloni" In-Reply-To: <20260714092053.2461482-8-lakshay.piplani@nxp.com> References: <20260714092053.2461482-1-lakshay.piplani@nxp.com> <20260714092053.2461482-8-lakshay.piplani@nxp.com> Date: Tue, 14 Jul 2026 11:31:51 +0000 Message-Id: <20260714113152.0DE771F000E9@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 NSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIENoaWxkIGRyaXZlciBp bGxlZ2FseSBvdmVyd3JpdGVzIHRoZSBwYXJlbnQgTUZEIGRldmljZSdzIHByaXZhdGUgZGF0YSwg Y2F1c2luZyB0eXBlIGNvbmZ1c2lvbiBhbmQga2VybmVsIHBhbmljcy4KLSBbSGlnaF0gVGhlIFNN QnVzIHRpbWVvdXQgZm9ybXVsYSB1bmRlcmVzdGltYXRlcyBtaW5pbXVtIHBoeXNpY2FsIHdpcmUg dGltZSwgY2F1c2luZyBsYXJnZSBibG9jayB0cmFuc2ZlcnMgdG8gaW5ldml0YWJseSBmYWlsIHdp dGggLUVUSU1FRE9VVC4KLSBbSGlnaF0gVGFyZ2V0IHBvcnRzIGNvbmZpZ3VyZWQgYXMgImkyYyIg YXJlIGxlZnQgY29tcGxldGVseSBkaXNjb25uZWN0ZWQgYW5kIGZ1bmN0aW9uYWxseSBkZWFkLgot IFtIaWdoXSBVc2UtQWZ0ZXItRnJlZSBvZiBkZXZpY2Ugc3RydWN0dXJlIGVtYmVkZGVkIGluIGRl dm0tYWxsb2NhdGVkIG1lbW9yeSBkdXJpbmcgZHJpdmVyIHVuYmluZC4KLSBbTWVkaXVtXSBNaXNz aW5nIEkyQyBhZGFwdGVyIHF1aXJrcyBjYXVzZXMgdW5kb2N1bWVudGVkIHJpZ2lkIHRyYW5zZmVy IHNpemUgbGltaXRzLgotLQoKLS0tIFBhdGNoIFs3XTogW1BBVENIIHYxNCA3LzhdIGkzYzogaHVi OiBwM2gyeDR4OiBBZGQgc3VwcG9ydCBmb3IgTlhQIFAzSDJ4NHggSTNDIGh1YiBmdW5jdGlvbmFs aXR5IC0tLQpjb21taXQgY2ZlMDdjNWVmMGE5MTdlNzc1N2JjMzFmYTM0ZTQ1OGRmMjJhNzhlZApB dXRob3I6IEFtYW4gS3VtYXIgUGFuZGV5IDxhbWFuLmt1bWFycGFuZGV5QG54cC5jb20+CgppM2M6 IGh1YjogcDNoMng0eDogQWRkIHN1cHBvcnQgZm9yIE5YUCBQM0gyeDR4IEkzQyBodWIgZnVuY3Rp b25hbGl0eQoKQWRkIEkzQyBodWIgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIE5YUCBQM0gyeDR4IGZh bWlseSBvZiBtdWx0aXBvcnQgaHVicy4KVGhlc2UgZGV2aWNlcyBzdXBwb3J0IGRvd25zdHJlYW0g dGFyZ2V0IHBvcnRzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQKYXMgSTNDLCBJMkMsIG9yIFNNQnVz LgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvaHViL3AzaDI4NDBfaTNjX2h1Yi5oIGIvZHJp dmVycy9pM2MvaHViL3AzaDI4NDBfaTNjX2h1Yi5oCj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uZTdh YjI0M2JiZmZmNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2kzYy9odWIvcDNoMjg0 MF9pM2NfaHViLmgKWyAuLi4gXQo+ICsvKiBIdWIgU01CdXMgdHJhbnNhY3Rpb24gdGltZSAqLwo+ ICsjZGVmaW5lIFAzSDJYNFhfU01CVVNfNDAwa0h6X1RSQU5TRkVSX1RJTUVPVVQoeCkJCSgoMjAg KiAoeCkpICsgODApCgpbU2V2ZXJpdHk6IEhpZ2hdCklzIHRoaXMgdGltZW91dCBmb3JtdWxhIHN1 ZmZpY2llbnQgZm9yIGxhcmdlIFNNQnVzIGJsb2NrIHRyYW5zZmVycz8KCkF0IDQwMGtIeiwgZWFj aCA5LWJpdCBJMkMgYnl0ZSB0YWtlcyAyMi41IHVzLiBGb3IgYSAzMi1ieXRlIHBheWxvYWQgcGx1 cyBhCjEtYnl0ZSBhZGRyZXNzLCB0aGUgbWluaW11bSBwaHlzaWNhbCB3aXJlIHRpbWUgaXMgMzMg KiAyMi41ID0gNzQyLjUgdXMuCkhvd2V2ZXIsIHRoZSBmb3JtdWxhIDIwICogeCArIDgwIGFsbG9j YXRlcyBvbmx5IDcyMCB1cyBmb3IgYSAzMi1ieXRlIHBheWxvYWQuCgpJZiBhIGxhcmdlIHBheWxv YWQgbWVzc2FnZSBpcyBzZW50LCB0aGUgdGltZW91dCB3aWxsIHRyaWdnZXIgaW4KcDNoMng0eF9y ZWFkX3NtYnVzX3RyYW5zYWN0aW9uX3N0YXR1cygpIGJlZm9yZSB0aGUgdHJhbnNmZXIgY2FuIGNv bXBsZXRlIG9uCnRoZSB3aXJlLCBjYXVzaW5nIGl0IHRvIGZhaWwgd2l0aCBhIHRpbWVvdXQuCgpb IC4uLiBdCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19odWJfY29t bW9uLmMgYi9kcml2ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX2NvbW1vbi5jCj4gaW5kZXgg MDAwMDAwMDAwMDAwMC4uMmZkOTcyM2RhNjBkOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX2NvbW1vbi5jClsgLi4uIF0KPiArc3RhdGljIGlu dCBwM2gyeDR4X2kzY19odWJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAr ewo+ICsJc3RydWN0IHAzaDJ4NHggKnAzaDJ4NHggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2 LnBhcmVudCk7Cj4gKwlzdHJ1Y3QgcDNoMng0eF9pM2NfaHViX2RldiAqcDNoMng0eF9pM2NfaHVi Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZTsKPiArCWludCByZXQsIGk7Cj4gKwo+ICsJcDNoMng0eF9pM2NfaHViID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwM2gyeDR4X2kzY19odWIpLCBHRlBfS0VSTkVMKTsKCltT ZXZlcml0eTogSGlnaF0KQ291bGQgdGhpcyBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUgZHVyaW5n IGRyaXZlciB1bmJpbmQ/CgpUaGUgcDNoMng0eF9pM2NfaHViIHN0cnVjdHVyZSBpcyBhbGxvY2F0 ZWQgdmlhIGRldm1fa3phbGxvYygpIGFuZCBjb250YWlucwpzdHJ1Y3QgaTNjX21hc3Rlcl9jb250 cm9sbGVyIGluc3RhbmNlcywgd2hpY2ggaW4gdHVybiBlbWJlZCBzdHJ1Y3QgZGV2aWNlLgoKV2hl biB0aGUgZGV2bSBhY3Rpb24gY2FsbHMgaTNjX21hc3Rlcl91bnJlZ2lzdGVyKCkgb24gZHJpdmVy IHVuYmluZCwgaXQKaW52b2tlcyBkZXZpY2VfdW5yZWdpc3RlcigpLiBCZWNhdXNlIGRldmljZV91 bnJlZ2lzdGVyKCkgZG9lcyBub3QgYmxvY2sgdG8Kd2FpdCBmb3IgYWxsIHN5c2ZzIHJlZmVyZW5j ZXMgdG8gZHJvcCwgdXNlcnNwYWNlIG1pZ2h0IHN0aWxsIGhvbGQgcmVmZXJlbmNlcy4KV2hlbiBk ZXZtIHN1YnNlcXVlbnRseSBmcmVlcyB0aGUgY29udGFpbmluZyBwM2gyeDR4X2kzY19odWJfZGV2 IHN0cnVjdHVyZSwKYWNjZXNzaW5nIHRob3NlIHJlbWFpbmluZyByZWZlcmVuY2VzIHdpbGwgY2F1 c2UgYSB1c2UtYWZ0ZXItZnJlZS4KCj4gKwlpZiAoIXAzaDJ4NHhfaTNjX2h1YikKPiArCQlyZXR1 cm4gLUVOT01FTTsKWyAuLi4gXQo+ICsJLyogUmVnaXN0ZXIgdmlydHVhbCBJM0MgbWFzdGVyIGNv bnRyb2xsZXJzIGZvciBJM0MgdGFyZ2V0IHBvcnRzICovCj4gKwlpZiAocDNoMng0eC0+aTNjZGV2 KSB7Cj4gKwkJcDNoMng0eF9pM2NfaHViLT5pM2NkZXYgPSBwM2gyeDR4LT5pM2NkZXY7Cj4gKwkJ aTNjZGV2X3NldF9kcnZkYXRhKHAzaDJ4NHgtPmkzY2RldiwgcDNoMng0eF9pM2NfaHViKTsKCltT ZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIGNvZGUgc2FmZWx5IG1hbmFnZSB0aGUgcGFyZW50IGRl dmljZSdzIHByaXZhdGUgZGF0YT8KCkJ5IGNhbGxpbmcgaTNjZGV2X3NldF9kcnZkYXRhKCkgb24g cDNoMng0eC0+aTNjZGV2IGhlcmUgaW4KcDNoMng0eF9pM2NfaHViX3Byb2JlKCksIGl0IHJlcGxh Y2VzIHRoZSBNRkQgcGFyZW50J3MgZHJ2ZGF0YSB3aXRoIHRoZSBjaGlsZApkcml2ZXIncyBjb250 ZXh0LiBJZiBhbnkgcGFyZW50IGNhbGxiYWNrcyB0cnkgdG8gcmV0cmlldmUgdGhlaXIgZGF0YSwg dGhleQp3aWxsIGluY29ycmVjdGx5IGNhc3Qgc3RydWN0IHAzaDJ4NHhfaTNjX2h1Yl9kZXYgdG8g c3RydWN0IHAzaDJ4NHgsIGxlYWRpbmcKdG8gdHlwZSBjb25mdXNpb24gYW5kIGRhdGEgY29ycnVw dGlvbi4KCj4gKwkJcmV0ID0gcDNoMng0eF90cF9pM2NfYWxnbyhwM2gyeDR4X2kzY19odWIpOwo+ ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFpbGVk IHRvIHJlZ2lzdGVyIGkzYyBidXNcbiIpOwo+ICsJfQpbIC4uLiBdCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19odWJfaTNjLmMgYi9kcml2ZXJzL2kzYy9odWIvcDNo Mjg0MF9pM2NfaHViX2kzYy5jCj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uMGU1YmY3ZWIzY2Y3Zgo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX2kz Yy5jClsgLi4uIF0KPiAraW50IHAzaDJ4NHhfdHBfaTNjX2FsZ28oc3RydWN0IHAzaDJ4NHhfaTNj X2h1Yl9kZXYgKnAzaDJ4NHhfaHViKQo+ICt7ClsgLi4uIF0KPiArCWZvciAodHAgPSAwOyB0cCA8 IFAzSDJYNFhfVFBfTUFYX0NPVU5UOyB0cCsrKSB7Cj4gKwkJaWYgKCFwM2gyeDR4X2h1Yi0+dHBf YnVzW3RwXS5vZl9ub2RlIHx8Cj4gKwkJICAgIHAzaDJ4NHhfaHViLT5odWJfY29uZmlnLnRwX2Nv bmZpZ1t0cF0ubW9kZSAhPSBQM0gyWDRYX1RQX01PREVfSTNDKQo+ICsJCQljb250aW51ZTsKCltT ZXZlcml0eTogSGlnaF0KV2lsbCB0YXJnZXQgcG9ydHMgY29uZmlndXJlZCBhcyBpMmMgaW4gdGhl IGRldmljZSB0cmVlIGJlIHJlZ2lzdGVyZWQ/CgpUaGUgcDNoMng0eF90cF9pM2NfYWxnbygpIGZ1 bmN0aW9uIGV4cGxpY2l0bHkgc2tpcHMgcG9ydHMgdW5sZXNzIHRoZXkgYXJlIGluCkkzQyBtb2Rl LiBTaW1pbGFybHksIHAzaDJ4NHhfdHBfc21idXNfYWxnbygpIHNraXBzIHBvcnRzIHVubGVzcyB0 aGV5IGFyZSBpbgpTTUJ1cyBtb2RlLiBBcyBhIHJlc3VsdCwgcG9ydHMgY29uZmlndXJlZCBhcyBp MmMgYXJlIGlnbm9yZWQgZW50aXJlbHkgYW5kCm5ldmVyIHJlZ2lzdGVyZWQgb3IgZW5hYmxlZCBp biB0aGUgaGFyZHdhcmUncyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gbWFzay4KCj4gKwo+ICsJCXN0 cnVjdCBpM2NfaHViX2NvbnRyb2xsZXIgKmh1Yl9jb250cm9sbGVyID0KPiArCQkJCSZwM2gyeDR4 X2h1Yi0+dHBfYnVzW3RwXS5odWJfY29udHJvbGxlcjsKWyAuLi4gXQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX3NtYnVzLmMgYi9kcml2ZXJzL2kzYy9odWIv cDNoMjg0MF9pM2NfaHViX3NtYnVzLmMKPiBpbmRleCAwMDAwMDAwMDAwMDAwLi5iOTkxYzQ2ZjNl ZDU5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19o dWJfc21idXMuYwpbIC4uLiBdCj4gK3N0YXRpYyBzMzIgcDNoMng0eF90cF9pMmNfeGZlcihzdHJ1 Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQo+ICt7 ClsgLi4uIF0KPiArCWZvciAobXNnX2NvdW50ID0gMDsgbXNnX2NvdW50IDwgbnVtOyBtc2dfY291 bnQrKykgewo+ICsJCWlmIChtc2dzW21zZ19jb3VudF0ubGVuID4gUDNIMlg0WF9TTUJVU19QQVlM T0FEX1NJWkUpIHsKPiArCQkJZGV2X2VycihwM2gyeDR4X2kzY19odWItPmRldiwKPiArCQkJCSJN ZXNzYWdlIG5yLiAlZCBub3Qgc2VudCAtIGxlbmd0aCBvdmVyICVkIGJ5dGVzLlxuIiwKPiArCQkJ CW1zZ19jb3VudCwgUDNIMlg0WF9TTUJVU19QQVlMT0FEX1NJWkUpOwo+ICsJCQlyZXR1cm4gLUVJ TlZBTDsKPiArCQl9CgpbU2V2ZXJpdHk6IE1lZGl1bV0KV291bGQgaXQgYmUgYmV0dGVyIHRvIGV4 cG9zZSB0aGlzIHNpemUgbGltaXRhdGlvbiB0byB0aGUgSTJDIHN1YnN5c3RlbT8KCkJ5IGVuZm9y Y2luZyBhIGhhcmQgYm91bmRhcnkgaGVyZSBkeW5hbWljYWxseSBpbiBwM2gyeDR4X3RwX2kyY194 ZmVyKCkKd2l0aG91dCBwb3B1bGF0aW5nIHRoZSBpMmNfYWRhcHRlcl9xdWlya3Mgc3RydWN0dXJl LCB0aGUgSTJDIHN1YnN5c3RlbQpjYW5ub3QgYXV0b21hdGljYWxseSBzcGxpdCB1cCBvdmVyc2l6 ZWQgcmVhZHMgYW5kIHdyaXRlcyBmb3IgdGhlIGNsaWVudC4KVGhpcyB3aWxsIHJlc3VsdCBpbiB1 bmV4cGVjdGVkIGZhaWx1cmVzIGZvciBzdGFuZGFyZCB0cmFuc2FjdGlvbnMgdGhhdCBleGNlZWQK ODQgYnl0ZXMuCgo+ICsKPiArCQlydyA9IChtc2dzW21zZ19jb3VudF0uZmxhZ3MgJiBJMkNfTV9S RCkgPyAxIDogMDsKWyAuLi4gXQoKLS0gClNhc2hpa28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vc2Fz aGlrby5kZXYvIy9wYXRjaHNldC8yMDI2MDcxNDA5MjA1My4yNDYxNDgyLTEtbGFrc2hheS5waXBs YW5pQG54cC5jb20/cGFydD03CgotLSAKbGludXgtaTNjIG1haWxpbmcgbGlzdApsaW51eC1pM2NA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LWkzYwo=