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 D3D5D279329 for ; Fri, 12 Jun 2026 11: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=1781264510; cv=none; b=BWm9IyfasGyKjgr+xD24PInCgNIZLansLKJZKjg1kLhUOR07WLl1NXAjaO3GDYmF2WvfzRnhRz9os6XDRcB2vgVIrKpfJuSwOdF2XrGneB/1EmrSxWdwd+H7vH6JZkDeug0sf/n7r+/QI1VtBGAJLkHRvezVUHNJpQ7P3KfMXPc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781264510; c=relaxed/simple; bh=7Akrj0muqzGIC6QJDlN0eX342jhkkx2l9FNJCznmzcE=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=qYqpgkz0qKPbkelG0n3zFWDQbGy89RzsdeSquNKISRFNKd0M604dSIfogqEjJQB7QC1/fn2yIRRiTZwetYIbpncOIp0wiOaww2u++TnBFoAMGYBfL3WEb99driaeSs7FaA4kGmwIMMHhYWJRYu6djaxuAGbC5enJwTOKbmQ1Xv0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=O3h8NAg5; 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="O3h8NAg5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C2CD1F000E9; Fri, 12 Jun 2026 11:41:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781264509; bh=OE7WvBNDiP/2LSLBiDhPSfXypYLE0hhbi6/E7Obo7pE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=O3h8NAg551ldbPyexZAZjFdbwatMWdHJTf7hIvqIbZ2B7Qx6E6wZZiDZiJ/7vSiO0 gDxmq3SL9Z+HW2ZCNd6seup8vZDozKmukb8j9yita0uCyFmuZCINM0I0fL4JXt+WHh 4e8jf+wgbnR0hwVfxeFmFYOxNNEYDOw6y7aJEgLV8g5QTawJtzxUrdSR2va27rxWfx JO7Bpk1XU0Y4joCvNGSvU1v+yBSutvQrsFWNIoVrH/2b+sAU91KAEyKmwnkPIOJ7/V FucV8b95KzyjTkzsPrZ7nYN5lL0JM9P/fmRJ2cP9aAzxJyIdO4Pqb7Mv8c9O/P2ISa EyfKBDK7hc8CA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v11 1/9] i3c: master: rename i3c_master_reattach_i3c_dev() to *_locked Reply-To: sashiko-reviews@lists.linux.dev To: "Lakshay Piplani" Cc: Frank.Li@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, linux-i3c@lists.infradead.org, robh@kernel.org In-Reply-To: <20260612111816.3688240-2-lakshay.piplani@nxp.com> References: <20260612111816.3688240-2-lakshay.piplani@nxp.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 12 Jun 2026 11:41:48 +0000 Message-Id: <20260612114149.2C2CD1F000E9@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: Pre-existing issues: - [High] The return value of `i3c_master_reattach_i3c_dev_locked()` is igno= red in `i3c_master_add_i3c_dev_locked()`, leading to bus state corruption i= f reattachment fails. - [High] Aggressive cleanup in `i3c_master_reattach_i3c_dev_locked()` sabot= ages the caller's hardware rollback path (`RSTDAA`) in `i3c_master_early_i3= c_dev_add()`. - [High] `i3c_device_uevent()` accesses `i3cdev->desc` without acquiring `b= us->lock`, leading to a Use-After-Free if a hot-join device replacement occ= urs concurrently. -- commit 8a7af37c292c3791d232cdb1c2f37ae5aba2ca10 Author: Lakshay Piplani i3c: master: rename i3c_master_reattach_i3c_dev() to *_locked =20 Rename i3c_master_reattach_i3c_dev() to *_locked() to make the locking requirement explicit and consistent with other I3C core helpers that require the bus lock to be held by the caller. > diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c > index 6b8df8089a357..c45b450af319d 100644 > --- a/drivers/i3c/master.c > +++ b/drivers/i3c/master.c [ ... ] > @@ -1742,7 +1742,7 @@ static int i3c_master_early_i3c_dev_add(struct i3c_= master_controller *master, > goto err_detach_dev; > =20 > i3cdev->info.dyn_addr =3D i3cdev->boardinfo->init_dyn_addr; > - ret =3D i3c_master_reattach_i3c_dev(i3cdev, 0); > + ret =3D i3c_master_reattach_i3c_dev_locked(i3cdev, 0); [Severity: High] This isn't a bug introduced by this patch, but doesn't the error path here break if the reattach fails? If master->ops->reattach_i3c_dev() fails, i3c_master_reattach_i3c_dev_locked() immediately marks the dev->info.dyn_addr slot as I3C_ADDR_SLOT_FREE via i3c_master_put_i3c_addrs(= ). This seems to sabotage the fallback path at err_rstdaa: drivers/i3c/master.c:i3c_master_early_i3c_dev_add() { ... err_rstdaa: i3c_master_rstdaa_locked(master, i3cdev->boardinfo->init_dyn_addr); ... } Since the address slot is now marked free, i3c_master_rstdaa_locked() will instantly abort with -EINVAL because the slot status is no longer I3C_ADDR_SLOT_I3C_DEV. Will this leave the physical device retaining the dynamic address while the master controller incorrectly considers it fr= ee? > if (ret) > goto err_rstdaa; > =20 [ ... ] > @@ -2358,7 +2358,7 @@ int i3c_master_add_i3c_dev_locked(struct i3c_master= _controller *master, > if (!ret) { > old_dyn_addr =3D newdev->info.dyn_addr; > newdev->info.dyn_addr =3D expected_dyn_addr; > - i3c_master_reattach_i3c_dev(newdev, old_dyn_addr); > + i3c_master_reattach_i3c_dev_locked(newdev, old_dyn_addr); [Severity: High] This is a pre-existing issue, but is it safe to ignore the return value of i3c_master_reattach_i3c_dev_locked() here? If the underlying master->ops->reattach_i3c_dev() fails, the reattach function calls i3c_master_put_i3c_addrs(), marking the device's assigned dynamic address slot as I3C_ADDR_SLOT_FREE in the bus bitmask. Since this failure is completely ignored and the caller returns success, the hardware remains configured to listen on the new dynamic address, but the software allocator considers the slot free. Could a subsequent hot-join or device addition be assigned this exact same dynamic address, leading to unrecoverable bus collisions? [Severity: High] Additionally, this isn't a bug introduced by this patch, but does i3c_master_add_i3c_dev_locked() race with userspace uevents during a hot-join device replacement? Later in this function, it identifies duplicate devices, migrates the generic struct device from the old descriptor to the new one, and eventually frees the old descriptor via i3c_master_free_i3c_dev(olddev). This process is protected by the bus maintenance lock. However, i3c_device_uevent() is triggered by sysfs and directly dereferences i3cdev->desc without acquiring the bus lock or employing RCU: drivers/i3c/master.c:i3c_device_uevent() { ... if (i3cdev->desc) devinfo =3D i3cdev->desc->info; manuf =3D I3C_PID_MANUF_ID(devinfo.pid); ... } If a thread executing i3c_device_uevent() evaluates i3cdev->desc, gets preempted while i3c_master_add_i3c_dev_locked() frees olddev, and then resumes, will this trigger a use-after-free during the structure copy? > } else { > dev_err(&master->dev, > "Failed to assign reserved/old address to device %d%llx", --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260612111816.3688= 240-1-lakshay.piplani@nxp.com?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 C7BD3CD8CA8 for ; Fri, 12 Jun 2026 11: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=zIBBG+FIyvnaOBbD653kWIWIhBLwmyXzsez5jseOi+s=; b=RAS/tMPmJPQj1e B9JWGk31Ys3O2mWpj/D9JMNUtUz8fyM3Tf3x0GAUPohOiBkfK7EzHKtNyWeA5gTNONkAPFgwnaQ0Z TNdtYWQq5Ps6ovuCGDk+pYcAow6YmalF5wz3ceU4I49g6TemVJLPX3KQou7mqEtiOGFgKbFTd/GR4 EQPE+sAl2RNGtAFRXkVEQIB+RCoqEyH0O3iCX8UrfCDg8xQ4+sQxP7y6JQUBHobOYQIqeWr8bRoi/ C1CI42AkcVl6QjaTHJ5rZMCT8cGJ+OZvvyMIlJLFcqhOlwYgkn2LiRksvzPq23mpQPOuhGsOID7zp PNLVJ6znyPWNJz7ZZarA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wY0Gm-0000000Aoc1-2Ksx; Fri, 12 Jun 2026 11: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 1wY0Gk-0000000Aobt-37qW for linux-i3c@lists.infradead.org; Fri, 12 Jun 2026 11: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 BED2D6008A; Fri, 12 Jun 2026 11:41:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C2CD1F000E9; Fri, 12 Jun 2026 11:41:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781264509; bh=OE7WvBNDiP/2LSLBiDhPSfXypYLE0hhbi6/E7Obo7pE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=O3h8NAg551ldbPyexZAZjFdbwatMWdHJTf7hIvqIbZ2B7Qx6E6wZZiDZiJ/7vSiO0 gDxmq3SL9Z+HW2ZCNd6seup8vZDozKmukb8j9yita0uCyFmuZCINM0I0fL4JXt+WHh 4e8jf+wgbnR0hwVfxeFmFYOxNNEYDOw6y7aJEgLV8g5QTawJtzxUrdSR2va27rxWfx JO7Bpk1XU0Y4joCvNGSvU1v+yBSutvQrsFWNIoVrH/2b+sAU91KAEyKmwnkPIOJ7/V FucV8b95KzyjTkzsPrZ7nYN5lL0JM9P/fmRJ2cP9aAzxJyIdO4Pqb7Mv8c9O/P2ISa EyfKBDK7hc8CA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v11 1/9] i3c: master: rename i3c_master_reattach_i3c_dev() to *_locked To: "Lakshay Piplani" Cc: Frank.Li@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, linux-i3c@lists.infradead.org, robh@kernel.org In-Reply-To: <20260612111816.3688240-2-lakshay.piplani@nxp.com> References: <20260612111816.3688240-2-lakshay.piplani@nxp.com> Date: Fri, 12 Jun 2026 11:41:48 +0000 Message-Id: <20260612114149.2C2CD1F000E9@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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpQcmUtZXhpc3RpbmcgaXNzdWVzOgot IFtIaWdoXSBUaGUgcmV0dXJuIHZhbHVlIG9mIGBpM2NfbWFzdGVyX3JlYXR0YWNoX2kzY19kZXZf bG9ja2VkKClgIGlzIGlnbm9yZWQgaW4gYGkzY19tYXN0ZXJfYWRkX2kzY19kZXZfbG9ja2VkKClg LCBsZWFkaW5nIHRvIGJ1cyBzdGF0ZSBjb3JydXB0aW9uIGlmIHJlYXR0YWNobWVudCBmYWlscy4K LSBbSGlnaF0gQWdncmVzc2l2ZSBjbGVhbnVwIGluIGBpM2NfbWFzdGVyX3JlYXR0YWNoX2kzY19k ZXZfbG9ja2VkKClgIHNhYm90YWdlcyB0aGUgY2FsbGVyJ3MgaGFyZHdhcmUgcm9sbGJhY2sgcGF0 aCAoYFJTVERBQWApIGluIGBpM2NfbWFzdGVyX2Vhcmx5X2kzY19kZXZfYWRkKClgLgotIFtIaWdo XSBgaTNjX2RldmljZV91ZXZlbnQoKWAgYWNjZXNzZXMgYGkzY2Rldi0+ZGVzY2Agd2l0aG91dCBh Y3F1aXJpbmcgYGJ1cy0+bG9ja2AsIGxlYWRpbmcgdG8gYSBVc2UtQWZ0ZXItRnJlZSBpZiBhIGhv dC1qb2luIGRldmljZSByZXBsYWNlbWVudCBvY2N1cnMgY29uY3VycmVudGx5LgotLQoKY29tbWl0 IDhhN2FmMzdjMjkyYzM3OTFkMjMyY2RiMWMyZjM3YWU1YWJhMmNhMTAKQXV0aG9yOiBMYWtzaGF5 IFBpcGxhbmkgPGxha3NoYXkucGlwbGFuaUBueHAuY29tPgoKaTNjOiBtYXN0ZXI6IHJlbmFtZSBp M2NfbWFzdGVyX3JlYXR0YWNoX2kzY19kZXYoKSB0byAqX2xvY2tlZAogICAgClJlbmFtZSBpM2Nf bWFzdGVyX3JlYXR0YWNoX2kzY19kZXYoKSB0byAqX2xvY2tlZCgpIHRvIG1ha2UgdGhlIGxvY2tp bmcKcmVxdWlyZW1lbnQgZXhwbGljaXQgYW5kIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBJM0MgY29y ZSBoZWxwZXJzIHRoYXQKcmVxdWlyZSB0aGUgYnVzIGxvY2sgdG8gYmUgaGVsZCBieSB0aGUgY2Fs bGVyLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyLmMgYi9kcml2ZXJzL2kzYy9t YXN0ZXIuYwo+IGluZGV4IDZiOGRmODA4OWEzNTcuLmM0NWI0NTBhZjMxOWQgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9pM2MvbWFzdGVyLmMKPiArKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIuYwoKWyAu Li4gXQoKPiBAQCAtMTc0Miw3ICsxNzQyLDcgQEAgc3RhdGljIGludCBpM2NfbWFzdGVyX2Vhcmx5 X2kzY19kZXZfYWRkKHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm1hc3RlciwKPiAgCQln b3RvIGVycl9kZXRhY2hfZGV2Owo+ICAKPiAgCWkzY2Rldi0+aW5mby5keW5fYWRkciA9IGkzY2Rl di0+Ym9hcmRpbmZvLT5pbml0X2R5bl9hZGRyOwo+IC0JcmV0ID0gaTNjX21hc3Rlcl9yZWF0dGFj aF9pM2NfZGV2KGkzY2RldiwgMCk7Cj4gKwlyZXQgPSBpM2NfbWFzdGVyX3JlYXR0YWNoX2kzY19k ZXZfbG9ja2VkKGkzY2RldiwgMCk7CgpbU2V2ZXJpdHk6IEhpZ2hdClRoaXMgaXNuJ3QgYSBidWcg aW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBidXQgZG9lc24ndCB0aGUgZXJyb3IgcGF0aApoZXJl IGJyZWFrIGlmIHRoZSByZWF0dGFjaCBmYWlscz8KCklmIG1hc3Rlci0+b3BzLT5yZWF0dGFjaF9p M2NfZGV2KCkgZmFpbHMsCmkzY19tYXN0ZXJfcmVhdHRhY2hfaTNjX2Rldl9sb2NrZWQoKSBpbW1l ZGlhdGVseSBtYXJrcyB0aGUKZGV2LT5pbmZvLmR5bl9hZGRyIHNsb3QgYXMgSTNDX0FERFJfU0xP VF9GUkVFIHZpYSBpM2NfbWFzdGVyX3B1dF9pM2NfYWRkcnMoKS4KClRoaXMgc2VlbXMgdG8gc2Fi b3RhZ2UgdGhlIGZhbGxiYWNrIHBhdGggYXQgZXJyX3JzdGRhYToKCmRyaXZlcnMvaTNjL21hc3Rl ci5jOmkzY19tYXN0ZXJfZWFybHlfaTNjX2Rldl9hZGQoKSB7CiAgICAuLi4KICAgIGVycl9yc3Rk YWE6CiAgICAgICAgaTNjX21hc3Rlcl9yc3RkYWFfbG9ja2VkKG1hc3RlciwgaTNjZGV2LT5ib2Fy ZGluZm8tPmluaXRfZHluX2FkZHIpOwogICAgLi4uCn0KClNpbmNlIHRoZSBhZGRyZXNzIHNsb3Qg aXMgbm93IG1hcmtlZCBmcmVlLCBpM2NfbWFzdGVyX3JzdGRhYV9sb2NrZWQoKQp3aWxsIGluc3Rh bnRseSBhYm9ydCB3aXRoIC1FSU5WQUwgYmVjYXVzZSB0aGUgc2xvdCBzdGF0dXMgaXMgbm8gbG9u Z2VyCkkzQ19BRERSX1NMT1RfSTNDX0RFVi4gV2lsbCB0aGlzIGxlYXZlIHRoZSBwaHlzaWNhbCBk ZXZpY2UgcmV0YWluaW5nCnRoZSBkeW5hbWljIGFkZHJlc3Mgd2hpbGUgdGhlIG1hc3RlciBjb250 cm9sbGVyIGluY29ycmVjdGx5IGNvbnNpZGVycyBpdCBmcmVlPwoKPiAgCWlmIChyZXQpCj4gIAkJ Z290byBlcnJfcnN0ZGFhOwo+ICAKClsgLi4uIF0KCj4gQEAgLTIzNTgsNyArMjM1OCw3IEBAIGlu dCBpM2NfbWFzdGVyX2FkZF9pM2NfZGV2X2xvY2tlZChzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9s bGVyICptYXN0ZXIsCj4gIAkJaWYgKCFyZXQpIHsKPiAgCQkJb2xkX2R5bl9hZGRyID0gbmV3ZGV2 LT5pbmZvLmR5bl9hZGRyOwo+ICAJCQluZXdkZXYtPmluZm8uZHluX2FkZHIgPSBleHBlY3RlZF9k eW5fYWRkcjsKPiAtCQkJaTNjX21hc3Rlcl9yZWF0dGFjaF9pM2NfZGV2KG5ld2Rldiwgb2xkX2R5 bl9hZGRyKTsKPiArCQkJaTNjX21hc3Rlcl9yZWF0dGFjaF9pM2NfZGV2X2xvY2tlZChuZXdkZXYs IG9sZF9keW5fYWRkcik7CgpbU2V2ZXJpdHk6IEhpZ2hdClRoaXMgaXMgYSBwcmUtZXhpc3Rpbmcg aXNzdWUsIGJ1dCBpcyBpdCBzYWZlIHRvIGlnbm9yZSB0aGUgcmV0dXJuCnZhbHVlIG9mIGkzY19t YXN0ZXJfcmVhdHRhY2hfaTNjX2Rldl9sb2NrZWQoKSBoZXJlPwoKSWYgdGhlIHVuZGVybHlpbmcg bWFzdGVyLT5vcHMtPnJlYXR0YWNoX2kzY19kZXYoKSBmYWlscywgdGhlIHJlYXR0YWNoCmZ1bmN0 aW9uIGNhbGxzIGkzY19tYXN0ZXJfcHV0X2kzY19hZGRycygpLCBtYXJraW5nIHRoZSBkZXZpY2Un cyBhc3NpZ25lZApkeW5hbWljIGFkZHJlc3Mgc2xvdCBhcyBJM0NfQUREUl9TTE9UX0ZSRUUgaW4g dGhlIGJ1cyBiaXRtYXNrLgoKU2luY2UgdGhpcyBmYWlsdXJlIGlzIGNvbXBsZXRlbHkgaWdub3Jl ZCBhbmQgdGhlIGNhbGxlciByZXR1cm5zIHN1Y2Nlc3MsCnRoZSBoYXJkd2FyZSByZW1haW5zIGNv bmZpZ3VyZWQgdG8gbGlzdGVuIG9uIHRoZSBuZXcgZHluYW1pYyBhZGRyZXNzLCBidXQKdGhlIHNv ZnR3YXJlIGFsbG9jYXRvciBjb25zaWRlcnMgdGhlIHNsb3QgZnJlZS4gQ291bGQgYSBzdWJzZXF1 ZW50CmhvdC1qb2luIG9yIGRldmljZSBhZGRpdGlvbiBiZSBhc3NpZ25lZCB0aGlzIGV4YWN0IHNh bWUgZHluYW1pYyBhZGRyZXNzLApsZWFkaW5nIHRvIHVucmVjb3ZlcmFibGUgYnVzIGNvbGxpc2lv bnM/CgpbU2V2ZXJpdHk6IEhpZ2hdCkFkZGl0aW9uYWxseSwgdGhpcyBpc24ndCBhIGJ1ZyBpbnRy b2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGJ1dCBkb2VzCmkzY19tYXN0ZXJfYWRkX2kzY19kZXZfbG9j a2VkKCkgcmFjZSB3aXRoIHVzZXJzcGFjZSB1ZXZlbnRzIGR1cmluZyBhCmhvdC1qb2luIGRldmlj ZSByZXBsYWNlbWVudD8KCkxhdGVyIGluIHRoaXMgZnVuY3Rpb24sIGl0IGlkZW50aWZpZXMgZHVw bGljYXRlIGRldmljZXMsIG1pZ3JhdGVzCnRoZSBnZW5lcmljIHN0cnVjdCBkZXZpY2UgZnJvbSB0 aGUgb2xkIGRlc2NyaXB0b3IgdG8gdGhlIG5ldyBvbmUsIGFuZApldmVudHVhbGx5IGZyZWVzIHRo ZSBvbGQgZGVzY3JpcHRvciB2aWEgaTNjX21hc3Rlcl9mcmVlX2kzY19kZXYob2xkZGV2KS4KVGhp cyBwcm9jZXNzIGlzIHByb3RlY3RlZCBieSB0aGUgYnVzIG1haW50ZW5hbmNlIGxvY2suCgpIb3dl dmVyLCBpM2NfZGV2aWNlX3VldmVudCgpIGlzIHRyaWdnZXJlZCBieSBzeXNmcyBhbmQgZGlyZWN0 bHkKZGVyZWZlcmVuY2VzIGkzY2Rldi0+ZGVzYyB3aXRob3V0IGFjcXVpcmluZyB0aGUgYnVzIGxv Y2sgb3IgZW1wbG95aW5nIFJDVToKCmRyaXZlcnMvaTNjL21hc3Rlci5jOmkzY19kZXZpY2VfdWV2 ZW50KCkgewogICAgLi4uCiAgICBpZiAoaTNjZGV2LT5kZXNjKQogICAgICAgIGRldmluZm8gPSBp M2NkZXYtPmRlc2MtPmluZm87CiAgICBtYW51ZiA9IEkzQ19QSURfTUFOVUZfSUQoZGV2aW5mby5w aWQpOwogICAgLi4uCn0KCklmIGEgdGhyZWFkIGV4ZWN1dGluZyBpM2NfZGV2aWNlX3VldmVudCgp IGV2YWx1YXRlcyBpM2NkZXYtPmRlc2MsIGdldHMKcHJlZW1wdGVkIHdoaWxlIGkzY19tYXN0ZXJf YWRkX2kzY19kZXZfbG9ja2VkKCkgZnJlZXMgb2xkZGV2LCBhbmQgdGhlbgpyZXN1bWVzLCB3aWxs IHRoaXMgdHJpZ2dlciBhIHVzZS1hZnRlci1mcmVlIGR1cmluZyB0aGUgc3RydWN0dXJlIGNvcHk/ Cgo+ICAJCX0gZWxzZSB7Cj4gIAkJCWRldl9lcnIoJm1hc3Rlci0+ZGV2LAo+ICAJCQkJIkZhaWxl ZCB0byBhc3NpZ24gcmVzZXJ2ZWQvb2xkIGFkZHJlc3MgdG8gZGV2aWNlICVkJWxseCIsCgotLSAK U2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYw NjEyMTExODE2LjM2ODgyNDAtMS1sYWtzaGF5LnBpcGxhbmlAbnhwLmNvbT9wYXJ0PTEKCi0tIAps aW51eC1pM2MgbWFpbGluZyBsaXN0CmxpbnV4LWkzY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtaTNjCg==