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 1434B3C4542; Tue, 28 Jul 2026 07:20: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=1785223254; cv=none; b=XmO08Yj2DQzcYgL4o1Zlkv+72Xn8kYoihzkHHpXBX6fMhuT4BYv/KZ348pXRkzTBzDtqhqV62fSoaO1S0DTJAvrQN/wZWAvWqeC+YONTg9GKqNkbMhLnyMCyDZoKkiY75/v27bZYrv7dnG6nZZbgmKGNmtQAbAPwFkaGFSlOvbQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785223254; c=relaxed/simple; bh=HddlPoGC7QhBxWvp2LxfEsh71nYJZr96rtYJ54VTDoI=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=XYdMh1Z9EI8YOvYTgJn9T7Z2oVsE7Qd3PF9EuTLi1l0R7ceYKE0T+MgF6N3y51wm6unL4EJHMBCynGyD6VqYuI4kDqlfYNiQdTHTRGaucUcaexbfLQnV1JsOths6t+rhcpl/5A0FxP6t7m+NDdNFb5uYwkn6tH+TvAp2o7q8MHc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=N/4WCBK4; 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="N/4WCBK4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 528E41F000E9; Tue, 28 Jul 2026 07:20:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785223252; bh=R/9h3j4EtZ4mjjNRNqiECDyhfTkG1qrXnhp5Vg6PVHw=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=N/4WCBK4v2qVgapt4eQTmpibGKUTLGkzKNT9aSOka/ezw1MB/286J4Xyrj9Lmf4/W /BuVDG4BoOqALHbjw9FvqAGDPv0dLrKNtwaFujjTvha8Sp5CcOaEBmeRW5IKx1IdY6 B0fd/wRGKNzXCh3Ll+LHU/sXigtdw74mqzQSpvBNwibYV2OJRoe4abVgh95OOepFwY g5ZYEebwX3+Faf3BmoWVv/0JzQJbTWamJJs4K+seNfG9JnQpQYsprzQoQb0b+da0KT 5ySiWzv4eU8qpxOLC/D0XAUWKurURCXTD8EPBWGbWLHPzbqIGqgUI6JBajWCC0DqFW jLSOVtPGEuEvw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 06/12] i3c: master: match I3C device through DT and ACPI Reply-To: sashiko-reviews@lists.linux.dev To: "Akhil R" Cc: linux-hwmon@vger.kernel.org, linux-i3c@lists.infradead.org, robh@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org, "Alexandre Belloni" , devicetree@vger.kernel.org In-Reply-To: <20260728065955.809445-7-akhilrajeev@nvidia.com> References: <20260728065955.809445-1-akhilrajeev@nvidia.com> <20260728065955.809445-7-akhilrajeev@nvidia.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Tue, 28 Jul 2026 07:20:51 +0000 Message-Id: <20260728072052.528E41F000E9@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] Uninitialized stack memory read and kernel stack information leak = during device unregistration when `i3cdev->desc` is NULL. - [High] NULL pointer dereference in sysfs attribute show functions when ac= cessed concurrently with device removal. -- --- Patch [6]: [PATCH v7 06/12] i3c: master: match I3C device through DT an= d ACPI --- commit d545f133fafb1ddd78e75d979b76dc143ac8e0b0 Author: Akhil R i3c: master: match I3C device through DT and ACPI This commit updates i3c_device_match() to allow SETAASA-based I3C devices to be matched through Device Tree or ACPI. It checks if the device has a SETAASA static address method and uses of_driver_match_device() or acpi_driver_match_device() as fallbacks when standard ID matching is not applicable. > diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c > index 488177d95e484..f94e2410d37ba 100644 > --- a/drivers/i3c/master.c > +++ b/drivers/i3c/master.c [ ... ] > @@ -345,15 +346,32 @@ static int i3c_device_match(struct device *dev, con= st struct device_driver *drv) > { > struct i3c_device *i3cdev; > const struct i3c_driver *i3cdrv; > + u8 static_addr_method =3D 0; > =20 > if (dev->type !=3D &i3c_device_type) > return 0; > =20 > i3cdev =3D dev_to_i3cdev(dev); > i3cdrv =3D drv_to_i3cdrv(drv); > - if (i3c_device_match_id(i3cdev, i3cdrv->id_table)) > + > + if (i3cdev->desc && i3cdev->desc->boardinfo) > + static_addr_method =3D i3cdev->desc->boardinfo->static_addr_method; > + > + /* > + * SETAASA-based devices need not always have a matching ID since > + * it is not mandatory for such devices to implement deviceinfo > + * CCC commands. Allow them to register through DT or ACPI. > + */ > + if (i3cdrv->id_table && i3c_device_match_id(i3cdev, i3cdrv->id_table)) [Severity: High] This is a pre-existing issue, but can i3c_device_match_id() read uninitialized stack memory here? During device unregistration, i3c_master_unregister_i3c_devs() explicitly sets i3cdev->dev->desc =3D NULL before calling device_unregister(). If driver matching occurs concurrently, i3c_device_match_id() might be call= ed while desc is NULL: drivers/i3c/device.c:i3c_device_match_id() { struct i3c_device_info devinfo; ... i3c_device_get_info(i3cdev, &devinfo); manuf =3D I3C_PID_MANUF_ID(devinfo.pid); ... } Because i3c_device_get_info() does not initialize devinfo when desc is NULL, this leaves stack memory to be read unconditionally and used in the matching logic. This same uninitialized memory can also leak to userspace through the uevent MODALIAS string in i3c_device_uevent() when desc is NULL. Should i3c_device_match_id() be guarded by checking i3cdev->desc, similar to how static_addr_method is guarded above? > return 1; > =20 > + if (static_addr_method & I3C_ADDR_METHOD_SETAASA) { > + if (of_driver_match_device(dev, drv)) > + return 1; > + if (acpi_driver_match_device(dev, drv)) > + return 1; > + } > + > return 0; > } Also, while reviewing this, I noticed another pre-existing issue during dev= ice unregistration: [Severity: High] This isn't a bug introduced by this patch, but can bcr_show() and dcr_show() dereference a NULL pointer? When i3c_master_unregister_i3c_devs() clears i3cdev->dev->desc =3D NULL, th= ere is a race window before the sysfs files are removed in device_del(). If a user reads the bcr or dcr sysfs attributes during this window, dev_to_i3cdesc() will return NULL: drivers/i3c/master.c:bcr_show() { ... desc =3D dev_to_i3cdesc(dev); ret =3D sysfs_emit(buf, "0x%02x\n", desc->info.bcr); ... } Could this lead to a NULL pointer dereference? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260728065955.8094= 45-1-akhilrajeev@nvidia.com?part=3D6 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 2CDA0C53219 for ; Tue, 28 Jul 2026 07:20: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=RaePZpP5EL+dUAF/xliKulIrGEe4c8ILALC+QXA4gdk=; b=h/TW2el8rzUgij iVbOCJQ6/TDqCAoiui9UbwPQUF/J7sNcN+cNIMhJMIGPpRXiRvAIo8J0B3VeC6zp6ApeeM8Ha8vR4 sdG7hLcluEBKyaocOBGmXhQfxI5JXHXCcOGGnjXm0/txppaxYhwxvzaUTsCswuYa94b/umofmZvf1 R7TI/IhD3y8+BJtfV7PPgUeAnq85KHBTiiRXNxnx4zTpNb1WgyNXB+NA2l6ZEEG+ygpxm8j6B+sNr dptHTMG+9C7U4hURmNQty4GJyIyk39fQQtIs8T4q+i5MGfFNT57dcPfjJm26fma24QvRBzbr/jr9b gxGaBerNfD9ML6qDb0EA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1woc7S-00000004d7l-3ihs; Tue, 28 Jul 2026 07:20:54 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1woc7R-00000004d7Q-113y for linux-i3c@lists.infradead.org; Tue, 28 Jul 2026 07:20:53 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id D52DE423E4; Tue, 28 Jul 2026 07:20:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 528E41F000E9; Tue, 28 Jul 2026 07:20:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785223252; bh=R/9h3j4EtZ4mjjNRNqiECDyhfTkG1qrXnhp5Vg6PVHw=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=N/4WCBK4v2qVgapt4eQTmpibGKUTLGkzKNT9aSOka/ezw1MB/286J4Xyrj9Lmf4/W /BuVDG4BoOqALHbjw9FvqAGDPv0dLrKNtwaFujjTvha8Sp5CcOaEBmeRW5IKx1IdY6 B0fd/wRGKNzXCh3Ll+LHU/sXigtdw74mqzQSpvBNwibYV2OJRoe4abVgh95OOepFwY g5ZYEebwX3+Faf3BmoWVv/0JzQJbTWamJJs4K+seNfG9JnQpQYsprzQoQb0b+da0KT 5ySiWzv4eU8qpxOLC/D0XAUWKurURCXTD8EPBWGbWLHPzbqIGqgUI6JBajWCC0DqFW jLSOVtPGEuEvw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 06/12] i3c: master: match I3C device through DT and ACPI To: "Akhil R" Cc: linux-hwmon@vger.kernel.org, linux-i3c@lists.infradead.org, robh@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org, "Alexandre Belloni" , devicetree@vger.kernel.org In-Reply-To: <20260728065955.809445-7-akhilrajeev@nvidia.com> References: <20260728065955.809445-1-akhilrajeev@nvidia.com> <20260728065955.809445-7-akhilrajeev@nvidia.com> Date: Tue, 28 Jul 2026 07:20:51 +0000 Message-Id: <20260728072052.528E41F000E9@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 MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpQcmUtZXhpc3RpbmcgaXNzdWVzOgot IFtIaWdoXSBVbmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSByZWFkIGFuZCBrZXJuZWwgc3RhY2sg aW5mb3JtYXRpb24gbGVhayBkdXJpbmcgZGV2aWNlIHVucmVnaXN0cmF0aW9uIHdoZW4gYGkzY2Rl di0+ZGVzY2AgaXMgTlVMTC4KLSBbSGlnaF0gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHN5 c2ZzIGF0dHJpYnV0ZSBzaG93IGZ1bmN0aW9ucyB3aGVuIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3 aXRoIGRldmljZSByZW1vdmFsLgotLQoKLS0tIFBhdGNoIFs2XTogW1BBVENIIHY3IDA2LzEyXSBp M2M6IG1hc3RlcjogbWF0Y2ggSTNDIGRldmljZSB0aHJvdWdoIERUIGFuZCBBQ1BJIC0tLQpjb21t aXQgZDU0NWYxMzNmYWZiMWRkZDc4ZTc1ZDk3OWI3NmRjMTQzYWM4ZTBiMApBdXRob3I6IEFraGls IFIgPGFraGlscmFqZWV2QG52aWRpYS5jb20+CgppM2M6IG1hc3RlcjogbWF0Y2ggSTNDIGRldmlj ZSB0aHJvdWdoIERUIGFuZCBBQ1BJCgpUaGlzIGNvbW1pdCB1cGRhdGVzIGkzY19kZXZpY2VfbWF0 Y2goKSB0byBhbGxvdyBTRVRBQVNBLWJhc2VkIEkzQyBkZXZpY2VzCnRvIGJlIG1hdGNoZWQgdGhy b3VnaCBEZXZpY2UgVHJlZSBvciBBQ1BJLiBJdCBjaGVja3MgaWYgdGhlIGRldmljZSBoYXMgYQpT RVRBQVNBIHN0YXRpYyBhZGRyZXNzIG1ldGhvZCBhbmQgdXNlcyBvZl9kcml2ZXJfbWF0Y2hfZGV2 aWNlKCkgb3IKYWNwaV9kcml2ZXJfbWF0Y2hfZGV2aWNlKCkgYXMgZmFsbGJhY2tzIHdoZW4gc3Rh bmRhcmQgSUQgbWF0Y2hpbmcgaXMgbm90CmFwcGxpY2FibGUuCgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2kzYy9tYXN0ZXIuYyBiL2RyaXZlcnMvaTNjL21hc3Rlci5jCj4gaW5kZXggNDg4MTc3ZDk1 ZTQ4NC4uZjk0ZTI0MTBkMzdiYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2kzYy9tYXN0ZXIuYwo+ ICsrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci5jCgpbIC4uLiBdCgo+IEBAIC0zNDUsMTUgKzM0Niwz MiBAQCBzdGF0aWMgaW50IGkzY19kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25z dCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQo+ICB7Cj4gIAlzdHJ1Y3QgaTNjX2RldmljZSAq aTNjZGV2Owo+ICAJY29uc3Qgc3RydWN0IGkzY19kcml2ZXIgKmkzY2RydjsKPiArCXU4IHN0YXRp Y19hZGRyX21ldGhvZCA9IDA7Cj4gIAo+ICAJaWYgKGRldi0+dHlwZSAhPSAmaTNjX2RldmljZV90 eXBlKQo+ICAJCXJldHVybiAwOwo+ICAKPiAgCWkzY2RldiA9IGRldl90b19pM2NkZXYoZGV2KTsK PiAgCWkzY2RydiA9IGRydl90b19pM2NkcnYoZHJ2KTsKPiAtCWlmIChpM2NfZGV2aWNlX21hdGNo X2lkKGkzY2RldiwgaTNjZHJ2LT5pZF90YWJsZSkpCj4gKwo+ICsJaWYgKGkzY2Rldi0+ZGVzYyAm JiBpM2NkZXYtPmRlc2MtPmJvYXJkaW5mbykKPiArCQlzdGF0aWNfYWRkcl9tZXRob2QgPSBpM2Nk ZXYtPmRlc2MtPmJvYXJkaW5mby0+c3RhdGljX2FkZHJfbWV0aG9kOwo+ICsKPiArCS8qCj4gKwkg KiBTRVRBQVNBLWJhc2VkIGRldmljZXMgbmVlZCBub3QgYWx3YXlzIGhhdmUgYSBtYXRjaGluZyBJ RCBzaW5jZQo+ICsJICogaXQgaXMgbm90IG1hbmRhdG9yeSBmb3Igc3VjaCBkZXZpY2VzIHRvIGlt cGxlbWVudCBkZXZpY2VpbmZvCj4gKwkgKiBDQ0MgY29tbWFuZHMuIEFsbG93IHRoZW0gdG8gcmVn aXN0ZXIgdGhyb3VnaCBEVCBvciBBQ1BJLgo+ICsJICovCj4gKwlpZiAoaTNjZHJ2LT5pZF90YWJs ZSAmJiBpM2NfZGV2aWNlX21hdGNoX2lkKGkzY2RldiwgaTNjZHJ2LT5pZF90YWJsZSkpCgpbU2V2 ZXJpdHk6IEhpZ2hdClRoaXMgaXMgYSBwcmUtZXhpc3RpbmcgaXNzdWUsIGJ1dCBjYW4gaTNjX2Rl dmljZV9tYXRjaF9pZCgpIHJlYWQKdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaGVyZT8KCkR1 cmluZyBkZXZpY2UgdW5yZWdpc3RyYXRpb24sIGkzY19tYXN0ZXJfdW5yZWdpc3Rlcl9pM2NfZGV2 cygpIGV4cGxpY2l0bHkKc2V0cyBpM2NkZXYtPmRldi0+ZGVzYyA9IE5VTEwgYmVmb3JlIGNhbGxp bmcgZGV2aWNlX3VucmVnaXN0ZXIoKS4KCklmIGRyaXZlciBtYXRjaGluZyBvY2N1cnMgY29uY3Vy cmVudGx5LCBpM2NfZGV2aWNlX21hdGNoX2lkKCkgbWlnaHQgYmUgY2FsbGVkCndoaWxlIGRlc2Mg aXMgTlVMTDoKCmRyaXZlcnMvaTNjL2RldmljZS5jOmkzY19kZXZpY2VfbWF0Y2hfaWQoKSB7CiAg ICBzdHJ1Y3QgaTNjX2RldmljZV9pbmZvIGRldmluZm87CiAgICAuLi4KICAgIGkzY19kZXZpY2Vf Z2V0X2luZm8oaTNjZGV2LCAmZGV2aW5mbyk7CiAgICBtYW51ZiA9IEkzQ19QSURfTUFOVUZfSUQo ZGV2aW5mby5waWQpOwogICAgLi4uCn0KCkJlY2F1c2UgaTNjX2RldmljZV9nZXRfaW5mbygpIGRv ZXMgbm90IGluaXRpYWxpemUgZGV2aW5mbyB3aGVuIGRlc2MgaXMgTlVMTCwKdGhpcyBsZWF2ZXMg c3RhY2sgbWVtb3J5IHRvIGJlIHJlYWQgdW5jb25kaXRpb25hbGx5IGFuZCB1c2VkIGluIHRoZSBt YXRjaGluZwpsb2dpYy4gVGhpcyBzYW1lIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBhbHNvIGxl YWsgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhlCnVldmVudCBNT0RBTElBUyBzdHJpbmcgaW4gaTNj X2RldmljZV91ZXZlbnQoKSB3aGVuIGRlc2MgaXMgTlVMTC4KClNob3VsZCBpM2NfZGV2aWNlX21h dGNoX2lkKCkgYmUgZ3VhcmRlZCBieSBjaGVja2luZyBpM2NkZXYtPmRlc2MsIHNpbWlsYXIKdG8g aG93IHN0YXRpY19hZGRyX21ldGhvZCBpcyBndWFyZGVkIGFib3ZlPwoKPiAgCQlyZXR1cm4gMTsK PiAgCj4gKwlpZiAoc3RhdGljX2FkZHJfbWV0aG9kICYgSTNDX0FERFJfTUVUSE9EX1NFVEFBU0Ep IHsKPiArCQlpZiAob2ZfZHJpdmVyX21hdGNoX2RldmljZShkZXYsIGRydikpCj4gKwkJCXJldHVy biAxOwo+ICsJCWlmIChhY3BpX2RyaXZlcl9tYXRjaF9kZXZpY2UoZGV2LCBkcnYpKQo+ICsJCQly ZXR1cm4gMTsKPiArCX0KPiArCj4gIAlyZXR1cm4gMDsKPiAgfQoKQWxzbywgd2hpbGUgcmV2aWV3 aW5nIHRoaXMsIEkgbm90aWNlZCBhbm90aGVyIHByZS1leGlzdGluZyBpc3N1ZSBkdXJpbmcgZGV2 aWNlCnVucmVnaXN0cmF0aW9uOgoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzbid0IGEgYnVnIGlu dHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IGNhbiBiY3Jfc2hvdygpIGFuZCBkY3Jfc2hvdygp CmRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyPwoKV2hlbiBpM2NfbWFzdGVyX3VucmVnaXN0ZXJf aTNjX2RldnMoKSBjbGVhcnMgaTNjZGV2LT5kZXYtPmRlc2MgPSBOVUxMLCB0aGVyZQppcyBhIHJh Y2Ugd2luZG93IGJlZm9yZSB0aGUgc3lzZnMgZmlsZXMgYXJlIHJlbW92ZWQgaW4gZGV2aWNlX2Rl bCgpLiBJZiBhCnVzZXIgcmVhZHMgdGhlIGJjciBvciBkY3Igc3lzZnMgYXR0cmlidXRlcyBkdXJp bmcgdGhpcyB3aW5kb3csCmRldl90b19pM2NkZXNjKCkgd2lsbCByZXR1cm4gTlVMTDoKCmRyaXZl cnMvaTNjL21hc3Rlci5jOmJjcl9zaG93KCkgewogICAgLi4uCiAgICBkZXNjID0gZGV2X3RvX2kz Y2Rlc2MoZGV2KTsKICAgIHJldCA9IHN5c2ZzX2VtaXQoYnVmLCAiMHglMDJ4XG4iLCBkZXNjLT5p bmZvLmJjcik7CiAgICAuLi4KfQoKQ291bGQgdGhpcyBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRl cmVmZXJlbmNlPwoKLS0gClNhc2hpa28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vc2FzaGlrby5kZXYv Iy9wYXRjaHNldC8yMDI2MDcyODA2NTk1NS44MDk0NDUtMS1ha2hpbHJhamVldkBudmlkaWEuY29t P3BhcnQ9NgoKLS0gCmxpbnV4LWkzYyBtYWlsaW5nIGxpc3QKbGludXgtaTNjQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1pM2MK