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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 8DCB1C55184 for ; Tue, 4 Aug 2026 15:37:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E4F3010EAF7; Tue, 4 Aug 2026 15:37:42 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="YYjWIR2n"; dkim-atps=neutral Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by gabe.freedesktop.org (Postfix) with ESMTPS id C6DA810EAF7 for ; Tue, 4 Aug 2026 15:37:41 +0000 (UTC) Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id DFFED60A75; Tue, 4 Aug 2026 15:37:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5667B1F000E9; Tue, 4 Aug 2026 15:37:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785857860; bh=9etF0gJ3X1/zHrRN/t6dkfO4BZ5KTDCOy02R6y+ps/8=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=YYjWIR2nV35A6ZdMU23HeIGUyOQDQzR6FpPB8VKSovRNZWMOT/f6A3HZG48FX/5aC px3ZWzJgV5wc4jUBo988fK/gg1/vEzk8nA+/UOxX+fQjjDg8UeWtLKwxsahfELoqP2 +cNOzhmkmwuYxdgvRLi4rjKcK4CUULRfKdyT/JUCyGDxu9OwrYHFZ2/byFFxhl/5kh BpzNjpVgEssJFMbUdzX8GAvRCco9DbJVgoCQbcasJuQgMKRsZqyHALjnvALIdwQStm 6IqIju+bKqTL2p//1MfpYZUOisto+TFubhy6WzmdLebsVa8YRzx59lCYi9pOJ3CW1W t46mkVmwdHWiA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2] drm/meson: clean up KMS polling on register failure To: "Myeonghun Pak" Cc: neil.armstrong@linaro.org, linux-amlogic@lists.infradead.org, dri-devel@lists.freedesktop.org In-Reply-To: <20260804150802.45262-1-mhun512@gmail.com> References: <20260524160657.17802-1-mhun512@gmail.com> <20260804150802.45262-1-mhun512@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Tue, 04 Aug 2026 15:37:39 +0000 Message-Id: <20260804153740.5667B1F000E9@smtp.kernel.org> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Thank you for your contribution! Sashiko AI review found 5 potential issue(= s) to consider: Pre-existing issues: - [High] NULL pointer dereference in error path if devm_kzalloc() fails to = allocate priv - [High] Use-After-Free due to DRM objects allocated with devm_kzalloc inst= ead of drmm_kzalloc - [High] Kernel panic/Resource leak on driver unload if initialized without= component framework - [High] Use-After-Free of devm-allocated bridges due to leakage in the glo= bal bridge_list - [High] Use-After-Free due to drm_dev_put() dropping the DRM device before= component_unbind_all() accesses it -- --- Patch [1]: [PATCH v2] drm/meson: clean up KMS polling on register failu= re --- commit 86a9a25dd06d99107bc269bc3d6752c0df753219 Author: Myeonghun Pak drm/meson: clean up KMS polling on register failure This commit ensures that drm_kms_helper_poll_fini() is called when drm_dev_register() fails in meson_drv_bind_master(). This stops the KMS polling helper before the probe error path unwinds the IRQ and frees the DRM device. Link: https://lore.kernel.org/r/20260524160657.17802-1-mhun512@gmail.com > diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/me= son_drv.c > index 49ff9f1f16d32..bcc36f2cdc9a9 100644 > --- a/drivers/gpu/drm/meson/meson_drv.c > +++ b/drivers/gpu/drm/meson/meson_drv.c > @@ -351,8 +351,10 @@ static int meson_drv_bind_master(struct device *dev,= bool has_components) > platform_set_drvdata(pdev, priv); > =20 > ret =3D drm_dev_register(drm, 0); > - if (ret) > + if (ret) { > + drm_kms_helper_poll_fini(drm); > goto uninstall_irq; > + } > =20 > drm_client_setup(drm, NULL); > =20 [Severity: High] This isn't a bug introduced by this patch, but can this error path in meson_drv_bind_master() trigger a NULL pointer dereference? If devm_kzalloc() fails to allocate memory for priv, it jumps to free_drm: drivers/gpu/drm/meson/meson_drv.c:meson_drv_bind_master() { ... priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) { ret =3D -ENOMEM; goto free_drm; } ... } At the free_drm label, meson_encoder_dsi_remove(priv) is called, which immediately dereferences the NULL priv pointer: drivers/gpu/drm/meson/meson_encoder_dsi.c:meson_encoder_dsi_remove() { ... if (priv->encoders[MESON_ENC_DSI]) { ... } [Severity: High] This is a pre-existing issue, but does using devm_kzalloc() for the DRM pla= ne risk a use-after-free? drivers/gpu/drm/meson/meson_plane.c:meson_plane_create() { ... meson_plane =3D devm_kzalloc(priv->drm->dev, sizeof(*meson_plane), GFP_KERNEL); ... } Because devm_kzalloc() ties the memory lifetime to the platform device, if the device is unbound (e.g., via sysfs) while userspace still holds a DRM file descriptor open, devres frees the plane structure. Later, when the file descriptor is closed, the DRM core cleans up and accesses this already-freed structure to invoke its .destroy hook. [Severity: High] This isn't a bug introduced by this patch, but does the driver unload seque= nce leak resources if initialized without the component framework? drivers/gpu/drm/meson/meson_drv.c:meson_drv_probe() { ... if (count && !match) return meson_drv_bind_master(&pdev->dev, false); ... } If no matching components are found, it bypasses the component framework. However, during driver teardown, it only cleans up via the component framework: drivers/gpu/drm/meson/meson_drv.c:meson_drv_remove() { ... component_master_del(&pdev->dev, &meson_drv_master_ops); } Because it was never added as a component master, meson_drv_unbind() is nev= er called, leaving the DRM device registered and memory allocated while the mo= dule is unloaded. [Severity: High] This is a pre-existing issue, but if drm_simple_encoder_init() fails, does = this leak the bridge in the global bridge_list? drivers/gpu/drm/meson/meson_encoder_dsi.c:meson_encoder_dsi_probe() { ... drm_bridge_add(&meson_encoder_dsi->bridge); meson_encoder_dsi->priv =3D priv; /* Encoder */ ret =3D drm_simple_encoder_init(priv->drm, &meson_encoder_dsi->encoder, DRM_MODE_ENCODER_DSI); if (ret) return dev_err_probe(priv->dev, ret, "Failed to init DSI encoder\n"); ... } If drm_simple_encoder_init() fails, the function returns an error without calling drm_bridge_remove(). Because the bridge is a devm allocation, its memory is freed on probe failure, but a dangling pointer remains in the global bridge_list. [Severity: High] This isn't a bug introduced by this patch, but can the teardown order cause= a use-after-free when cleaning up components? drivers/gpu/drm/meson/meson_drv.c:meson_drv_bind_master() { ... free_drm: drm_dev_put(drm); meson_encoder_dsi_remove(priv); meson_encoder_hdmi_remove(priv); meson_encoder_cvbs_remove(priv); if (has_components) component_unbind_all(dev, drm); ... } The call to drm_dev_put(drm) drops the final reference and frees the drm device. Then component_unbind_all(dev, drm) passes this newly freed drm poi= nter to the unbind callbacks, which may attempt to access it. This same sequence also exists in meson_drv_unbind(). --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260804150802.4526= 2-1-mhun512@gmail.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 BCCB2C55822 for ; Tue, 4 Aug 2026 15:37:48 +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=IMdsyflAF7+6nTC2DSW9T3hupH2hMkbDaQ5pIfIP9co=; b=xvpp5U1r8ifx3M QZGl3xdZNgFgYr7be9zbzjVG2MkJKLQdM6cK/VesBOrAgPMG0LFhOt5SIQv9JkssANiwmFpqbhQTi J7QAenoTcXLI2bid684FrmhsfFeCYZNJimyY4so4xNGA9x5tndpFtdxwKFAmfV0X1c20o7MtMYlKr iy8VxRjJs3tPcJHnyegNf13ee/s1Q0t/HWAq92TciMxshXf+OGwbQsv9QQlpFrwJ8eRNMmmnGY7k+ RH/7CrvohVEQ4aiJX7os79cYKdnc+UfcaOcDuPTyGr31HRGPOfdsjqoVys7zXT5ym7UPgiel2jvzq pNfDgiqQc8emS9lk5ewg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wrHD5-00000002EJn-146Q; Tue, 04 Aug 2026 15:37:43 +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 1wrHD3-00000002EJh-2wSF for linux-amlogic@lists.infradead.org; Tue, 04 Aug 2026 15:37:41 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id DFFED60A75; Tue, 4 Aug 2026 15:37:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5667B1F000E9; Tue, 4 Aug 2026 15:37:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785857860; bh=9etF0gJ3X1/zHrRN/t6dkfO4BZ5KTDCOy02R6y+ps/8=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=YYjWIR2nV35A6ZdMU23HeIGUyOQDQzR6FpPB8VKSovRNZWMOT/f6A3HZG48FX/5aC px3ZWzJgV5wc4jUBo988fK/gg1/vEzk8nA+/UOxX+fQjjDg8UeWtLKwxsahfELoqP2 +cNOzhmkmwuYxdgvRLi4rjKcK4CUULRfKdyT/JUCyGDxu9OwrYHFZ2/byFFxhl/5kh BpzNjpVgEssJFMbUdzX8GAvRCco9DbJVgoCQbcasJuQgMKRsZqyHALjnvALIdwQStm 6IqIju+bKqTL2p//1MfpYZUOisto+TFubhy6WzmdLebsVa8YRzx59lCYi9pOJ3CW1W t46mkVmwdHWiA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2] drm/meson: clean up KMS polling on register failure To: "Myeonghun Pak" Cc: neil.armstrong@linaro.org, linux-amlogic@lists.infradead.org, dri-devel@lists.freedesktop.org In-Reply-To: <20260804150802.45262-1-mhun512@gmail.com> References: <20260524160657.17802-1-mhun512@gmail.com> <20260804150802.45262-1-mhun512@gmail.com> Date: Tue, 04 Aug 2026 15:37:39 +0000 Message-Id: <20260804153740.5667B1F000E9@smtp.kernel.org> X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg NSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpQcmUtZXhpc3RpbmcgaXNzdWVzOgot IFtIaWdoXSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gZXJyb3IgcGF0aCBpZiBkZXZtX2t6 YWxsb2MoKSBmYWlscyB0byBhbGxvY2F0ZSBwcml2Ci0gW0hpZ2hdIFVzZS1BZnRlci1GcmVlIGR1 ZSB0byBEUk0gb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBkZXZtX2t6YWxsb2MgaW5zdGVhZCBvZiBk cm1tX2t6YWxsb2MKLSBbSGlnaF0gS2VybmVsIHBhbmljL1Jlc291cmNlIGxlYWsgb24gZHJpdmVy IHVubG9hZCBpZiBpbml0aWFsaXplZCB3aXRob3V0IGNvbXBvbmVudCBmcmFtZXdvcmsKLSBbSGln aF0gVXNlLUFmdGVyLUZyZWUgb2YgZGV2bS1hbGxvY2F0ZWQgYnJpZGdlcyBkdWUgdG8gbGVha2Fn ZSBpbiB0aGUgZ2xvYmFsIGJyaWRnZV9saXN0Ci0gW0hpZ2hdIFVzZS1BZnRlci1GcmVlIGR1ZSB0 byBkcm1fZGV2X3B1dCgpIGRyb3BwaW5nIHRoZSBEUk0gZGV2aWNlIGJlZm9yZSBjb21wb25lbnRf dW5iaW5kX2FsbCgpIGFjY2Vzc2VzIGl0Ci0tCgotLS0gUGF0Y2ggWzFdOiBbUEFUQ0ggdjJdIGRy bS9tZXNvbjogY2xlYW4gdXAgS01TIHBvbGxpbmcgb24gcmVnaXN0ZXIgZmFpbHVyZSAtLS0KY29t bWl0IDg2YTlhMjVkZDA2ZDk5MTA3YmMyNjliYzNkNjc1MmMwZGY3NTMyMTkKQXV0aG9yOiBNeWVv bmdodW4gUGFrIDxtaHVuNTEyQGdtYWlsLmNvbT4KCmRybS9tZXNvbjogY2xlYW4gdXAgS01TIHBv bGxpbmcgb24gcmVnaXN0ZXIgZmFpbHVyZQoKVGhpcyBjb21taXQgZW5zdXJlcyB0aGF0IGRybV9r bXNfaGVscGVyX3BvbGxfZmluaSgpIGlzIGNhbGxlZCB3aGVuCmRybV9kZXZfcmVnaXN0ZXIoKSBm YWlscyBpbiBtZXNvbl9kcnZfYmluZF9tYXN0ZXIoKS4gVGhpcyBzdG9wcyB0aGUKS01TIHBvbGxp bmcgaGVscGVyIGJlZm9yZSB0aGUgcHJvYmUgZXJyb3IgcGF0aCB1bndpbmRzIHRoZSBJUlEgYW5k CmZyZWVzIHRoZSBEUk0gZGV2aWNlLgoKTGluazogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci8y MDI2MDUyNDE2MDY1Ny4xNzgwMi0xLW1odW41MTJAZ21haWwuY29tCgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24v bWVzb25fZHJ2LmMKPiBpbmRleCA0OWZmOWYxZjE2ZDMyLi5iY2MzNmYyY2RjOWE5IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9kcnYuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZXNvbi9tZXNvbl9kcnYuYwo+IEBAIC0zNTEsOCArMzUxLDEwIEBAIHN0YXRpYyBp bnQgbWVzb25fZHJ2X2JpbmRfbWFzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBoYXNfY29t cG9uZW50cykKPiAgCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwo+ICAKPiAgCXJl dCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKPiAtCWlmIChyZXQpCj4gKwlpZiAocmV0KSB7 Cj4gKwkJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7Cj4gIAkJZ290byB1bmluc3RhbGxf aXJxOwo+ICsJfQo+ICAKPiAgCWRybV9jbGllbnRfc2V0dXAoZHJtLCBOVUxMKTsKPiAgCgpbU2V2 ZXJpdHk6IEhpZ2hdClRoaXMgaXNuJ3QgYSBidWcgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBi dXQgY2FuIHRoaXMgZXJyb3IgcGF0aCBpbgptZXNvbl9kcnZfYmluZF9tYXN0ZXIoKSB0cmlnZ2Vy IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlPwoKSWYgZGV2bV9remFsbG9jKCkgZmFpbHMgdG8g YWxsb2NhdGUgbWVtb3J5IGZvciBwcml2LCBpdCBqdW1wcyB0byBmcmVlX2RybToKCmRyaXZlcnMv Z3B1L2RybS9tZXNvbi9tZXNvbl9kcnYuYzptZXNvbl9kcnZfYmluZF9tYXN0ZXIoKSB7CgkuLi4K CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKCWlm ICghcHJpdikgewoJCXJldCA9IC1FTk9NRU07CgkJZ290byBmcmVlX2RybTsKCX0KCS4uLgp9CgpB dCB0aGUgZnJlZV9kcm0gbGFiZWwsIG1lc29uX2VuY29kZXJfZHNpX3JlbW92ZShwcml2KSBpcyBj YWxsZWQsIHdoaWNoCmltbWVkaWF0ZWx5IGRlcmVmZXJlbmNlcyB0aGUgTlVMTCBwcml2IHBvaW50 ZXI6Cgpkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZW5jb2Rlcl9kc2kuYzptZXNvbl9lbmNv ZGVyX2RzaV9yZW1vdmUoKSB7CgkuLi4KCWlmIChwcml2LT5lbmNvZGVyc1tNRVNPTl9FTkNfRFNJ XSkgewoJLi4uCn0KCltTZXZlcml0eTogSGlnaF0KVGhpcyBpcyBhIHByZS1leGlzdGluZyBpc3N1 ZSwgYnV0IGRvZXMgdXNpbmcgZGV2bV9remFsbG9jKCkgZm9yIHRoZSBEUk0gcGxhbmUKcmlzayBh IHVzZS1hZnRlci1mcmVlPwoKZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX3BsYW5lLmM6bWVz b25fcGxhbmVfY3JlYXRlKCkgewoJLi4uCgltZXNvbl9wbGFuZSA9IGRldm1fa3phbGxvYyhwcml2 LT5kcm0tPmRldiwgc2l6ZW9mKCptZXNvbl9wbGFuZSksCgkJCQkgICBHRlBfS0VSTkVMKTsKCS4u Lgp9CgpCZWNhdXNlIGRldm1fa3phbGxvYygpIHRpZXMgdGhlIG1lbW9yeSBsaWZldGltZSB0byB0 aGUgcGxhdGZvcm0gZGV2aWNlLCBpZgp0aGUgZGV2aWNlIGlzIHVuYm91bmQgKGUuZy4sIHZpYSBz eXNmcykgd2hpbGUgdXNlcnNwYWNlIHN0aWxsIGhvbGRzIGEgRFJNCmZpbGUgZGVzY3JpcHRvciBv cGVuLCBkZXZyZXMgZnJlZXMgdGhlIHBsYW5lIHN0cnVjdHVyZS4gTGF0ZXIsIHdoZW4gdGhlIGZp bGUKZGVzY3JpcHRvciBpcyBjbG9zZWQsIHRoZSBEUk0gY29yZSBjbGVhbnMgdXAgYW5kIGFjY2Vz c2VzIHRoaXMgYWxyZWFkeS1mcmVlZApzdHJ1Y3R1cmUgdG8gaW52b2tlIGl0cyAuZGVzdHJveSBo b29rLgoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzbid0IGEgYnVnIGludHJvZHVjZWQgYnkgdGhp cyBwYXRjaCwgYnV0IGRvZXMgdGhlIGRyaXZlciB1bmxvYWQgc2VxdWVuY2UKbGVhayByZXNvdXJj ZXMgaWYgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGUgY29tcG9uZW50IGZyYW1ld29yaz8KCmRyaXZl cnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9kcnYuYzptZXNvbl9kcnZfcHJvYmUoKSB7CgkuLi4KCWlm IChjb3VudCAmJiAhbWF0Y2gpCgkJcmV0dXJuIG1lc29uX2Rydl9iaW5kX21hc3RlcigmcGRldi0+ ZGV2LCBmYWxzZSk7CgkuLi4KfQoKSWYgbm8gbWF0Y2hpbmcgY29tcG9uZW50cyBhcmUgZm91bmQs IGl0IGJ5cGFzc2VzIHRoZSBjb21wb25lbnQgZnJhbWV3b3JrLgpIb3dldmVyLCBkdXJpbmcgZHJp dmVyIHRlYXJkb3duLCBpdCBvbmx5IGNsZWFucyB1cCB2aWEgdGhlIGNvbXBvbmVudApmcmFtZXdv cms6Cgpkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmM6bWVzb25fZHJ2X3JlbW92ZSgp IHsKCS4uLgoJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm1lc29uX2Rydl9tYXN0 ZXJfb3BzKTsKfQoKQmVjYXVzZSBpdCB3YXMgbmV2ZXIgYWRkZWQgYXMgYSBjb21wb25lbnQgbWFz dGVyLCBtZXNvbl9kcnZfdW5iaW5kKCkgaXMgbmV2ZXIKY2FsbGVkLCBsZWF2aW5nIHRoZSBEUk0g ZGV2aWNlIHJlZ2lzdGVyZWQgYW5kIG1lbW9yeSBhbGxvY2F0ZWQgd2hpbGUgdGhlIG1vZHVsZQpp cyB1bmxvYWRlZC4KCltTZXZlcml0eTogSGlnaF0KVGhpcyBpcyBhIHByZS1leGlzdGluZyBpc3N1 ZSwgYnV0IGlmIGRybV9zaW1wbGVfZW5jb2Rlcl9pbml0KCkgZmFpbHMsIGRvZXMgdGhpcwpsZWFr IHRoZSBicmlkZ2UgaW4gdGhlIGdsb2JhbCBicmlkZ2VfbGlzdD8KCmRyaXZlcnMvZ3B1L2RybS9t ZXNvbi9tZXNvbl9lbmNvZGVyX2RzaS5jOm1lc29uX2VuY29kZXJfZHNpX3Byb2JlKCkgewoJLi4u Cglkcm1fYnJpZGdlX2FkZCgmbWVzb25fZW5jb2Rlcl9kc2ktPmJyaWRnZSk7CgoJbWVzb25fZW5j b2Rlcl9kc2ktPnByaXYgPSBwcml2OwoKCS8qIEVuY29kZXIgKi8KCXJldCA9IGRybV9zaW1wbGVf ZW5jb2Rlcl9pbml0KHByaXYtPmRybSwgJm1lc29uX2VuY29kZXJfZHNpLT5lbmNvZGVyLAoJCQkJ ICAgICAgRFJNX01PREVfRU5DT0RFUl9EU0kpOwoJaWYgKHJldCkKCQlyZXR1cm4gZGV2X2Vycl9w cm9iZShwcml2LT5kZXYsIHJldCwKCQkJCSAgICAgIkZhaWxlZCB0byBpbml0IERTSSBlbmNvZGVy XG4iKTsKCS4uLgp9CgpJZiBkcm1fc2ltcGxlX2VuY29kZXJfaW5pdCgpIGZhaWxzLCB0aGUgZnVu Y3Rpb24gcmV0dXJucyBhbiBlcnJvciB3aXRob3V0CmNhbGxpbmcgZHJtX2JyaWRnZV9yZW1vdmUo KS4gQmVjYXVzZSB0aGUgYnJpZGdlIGlzIGEgZGV2bSBhbGxvY2F0aW9uLCBpdHMKbWVtb3J5IGlz IGZyZWVkIG9uIHByb2JlIGZhaWx1cmUsIGJ1dCBhIGRhbmdsaW5nIHBvaW50ZXIgcmVtYWlucyBp biB0aGUKZ2xvYmFsIGJyaWRnZV9saXN0LgoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzbid0IGEg YnVnIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IGNhbiB0aGUgdGVhcmRvd24gb3JkZXIg Y2F1c2UgYQp1c2UtYWZ0ZXItZnJlZSB3aGVuIGNsZWFuaW5nIHVwIGNvbXBvbmVudHM/Cgpkcml2 ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmM6bWVzb25fZHJ2X2JpbmRfbWFzdGVyKCkgewoJ Li4uCmZyZWVfZHJtOgoJZHJtX2Rldl9wdXQoZHJtKTsKCgltZXNvbl9lbmNvZGVyX2RzaV9yZW1v dmUocHJpdik7CgltZXNvbl9lbmNvZGVyX2hkbWlfcmVtb3ZlKHByaXYpOwoJbWVzb25fZW5jb2Rl cl9jdmJzX3JlbW92ZShwcml2KTsKCglpZiAoaGFzX2NvbXBvbmVudHMpCgkJY29tcG9uZW50X3Vu YmluZF9hbGwoZGV2LCBkcm0pOwoJLi4uCn0KClRoZSBjYWxsIHRvIGRybV9kZXZfcHV0KGRybSkg ZHJvcHMgdGhlIGZpbmFsIHJlZmVyZW5jZSBhbmQgZnJlZXMgdGhlIGRybQpkZXZpY2UuIFRoZW4g Y29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pIHBhc3NlcyB0aGlzIG5ld2x5IGZyZWVkIGRy bSBwb2ludGVyCnRvIHRoZSB1bmJpbmQgY2FsbGJhY2tzLCB3aGljaCBtYXkgYXR0ZW1wdCB0byBh Y2Nlc3MgaXQuIFRoaXMgc2FtZSBzZXF1ZW5jZQphbHNvIGV4aXN0cyBpbiBtZXNvbl9kcnZfdW5i aW5kKCkuCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3Bh dGNoc2V0LzIwMjYwODA0MTUwODAyLjQ1MjYyLTEtbWh1bjUxMkBnbWFpbC5jb20/cGFydD0xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hbWxv Z2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hbWxvZ2ljCg==