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 C180746D2C5; Fri, 28 Aug 2026 14:01:18 +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=1787925681; cv=none; b=UefXuyb2TW6WCHpNG0T8yZgi9JnQ9gGjWTMFm0BGHM48BYn+R8tvkvMWMMS0qSmoqtIktPDgKywXyVmcfnS0FHKs2aeN2CVKEPohhsp4sTbHDkAELyFXnpanEBf1gQjmb+tszh0xcVe26YNDZBBtV8NqWZj4i3ds0LUKozJUK7A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787925681; c=relaxed/simple; bh=nSGwrlc0HSM9dwuszlpCdhjgBIbG8htdmO4yi4z0JOI=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=T3VghrLi6/EKhhTwyQ9Rip79rxMkU8uO/Je3H2uv1nIWd/8Kdzm6n0dsNxf2lYcK+YtEC5qSFJe80KRjvJsoggZrdMqgTtItUgY7wYiLT5Zrx4MgTQ4hmk5ILtQGQfzmiC+q04o+hc2n/05PLq2xpSUxpjGHFmcNlSNZNOioGq8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OB4qG1sp; 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="OB4qG1sp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 64C641F000E9; Fri, 28 Aug 2026 14:01:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787925678; bh=9ekEJRd5FMjnbwKp4zU4Nj6ot2XimkwzMO04o1f9lNI=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=OB4qG1spJDL2GiHu0RseVakg4F52NZzuZ58eOik2Qse6ngpg+q9k0XVtXSLBLaFGB LIJjkW8sqG75c0PzNqzV6cZB7SMchalusi2EJXt0dCu+oh0lzwmT3HPl3/bG57wenN dx1jgKELEYB8ixjZCEukoKLehcVMq6TE8mG+mbNxDAGSTEIXdO3tOPUFYZzCvIiOq8 SmayeT6ieN8WKW5ZxedUizdQCcSz0Lvg8UbZkQ5woMNn2iZenLqYPP1tPQDjhA02+T MV52n0lSuhTiCk8ZdXZ7AJA+Y0WnzK9Te0GPIUqztdq9HOlF+PYYICC4qUV2pzgD2Y Z0egWlwxKxTlw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 04/15] drm/bridge: inno-hdmi: Split probe out of bind Reply-To: sashiko-reviews@lists.linux.dev To: "Michal Wilczynski" Cc: conor+dt@kernel.org, vkoul@kernel.org, olteanv@gmail.com, devicetree@vger.kernel.org, robh@kernel.org, linux-phy@lists.infradead.org, mfd@lists.linux.dev, lee@kernel.org, dri-devel@lists.freedesktop.org, neil.armstrong@linaro.org, linux-clk@vger.kernel.org In-Reply-To: <20260828-jh7110-clean-send-v2-4-331680c8b9d1@samsung.com> References: <20260828-jh7110-clean-send-v2-0-331680c8b9d1@samsung.com> <20260828-jh7110-clean-send-v2-4-331680c8b9d1@samsung.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 28 Aug 2026 14:01:16 +0000 Message-Id: <20260828140117.64C641F000E9@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: New issues: - [High] Missing `inno_hdmi_remove` implementation leads to hardware interr= upt storms and violates API contract. Pre-existing issues: - [Critical] HPD IRQ is requested and enabled before bridge attach, leading= to NULL pointer dereference in the interrupt handler. - [High] Resource leak of devm_-managed allocations during component bind r= etries. - [High] TOCTOU race exposing the I2C adapter to userspace before internal = initialization completes. - [High] Use-after-free in the interrupt handler during device teardown due= to incorrect devres registration order. -- commit 355630a3f7bbfe2d55d6902048b35afc6cb4d58d Author: Michal Wilczynski drm/bridge: inno-hdmi: Split probe out of bind =20 inno_hdmi_bind() both sets up the bridge and attaches it to a DRM encoder. A platform whose HDMI controller is a child of a larger device needs the first half without the second, since it registers as its own platform driver and lets the DRM core bind the bridge later. =20 Move the setup into a new exported inno_hdmi_probe(), with a matching inno_hdmi_remove(), and reduce inno_hdmi_bind() to a wrapper around it. =20 No functional change intended. > Move the setup into a new exported inno_hdmi_probe(), with a matching > inno_hdmi_remove(), and reduce inno_hdmi_bind() to a wrapper around it. [Severity: High] The commit message mentions adding a matching inno_hdmi_remove() function, but it does not appear to be implemented in this patch. Without an exported remove function to safely tear down the hardware and unmask interrupts, could this lead to hardware interrupt storms if the platform module is removed or the driver is unbound? > diff --git a/drivers/gpu/drm/bridge/inno-hdmi.c b/drivers/gpu/drm/bridge/= inno-hdmi.c > index 9a62bf59a4033..12fd208d5e852 100644 > --- a/drivers/gpu/drm/bridge/inno-hdmi.c > +++ b/drivers/gpu/drm/bridge/inno-hdmi.c [ ... ] > +struct inno_hdmi *inno_hdmi_probe(struct platform_device *pdev, > + const struct inno_hdmi_plat_data *plat_data) > { > - struct platform_device *pdev =3D to_platform_device(dev); > + struct device *dev =3D &pdev->dev; [Severity: High] This isn't a bug introduced by this patch, but there appears to be a time-of-check to time-of-use (TOCTOU) race condition during I2C adapter registration within this setup path. In inno_hdmi_i2c_adapter(), devm_i2c_add_adapter() publishes the adapter to userspace before assigning hdmi->i2c =3D i2c. If a userspace tool initiates an I2C transaction concurrently during this small window, inno_hdmi_i2c_xfer() will attempt to lock i2c->lock using the still-NULL hdmi->i2c pointer. Can this lead to a NULL pointer dereference? [Severity: Critical] This is a pre-existing issue, but requesting the IRQ before the bridge is attached seems to cause a crash on decoupled platforms. During the hardware setup in this path, devm_request_threaded_irq() requests the hotplug interrupt. If a monitor is already connected, the interrupt can fire immediately. The handler, inno_hdmi_irq(), unconditional= ly calls drm_helper_hpd_irq_event(hdmi->bridge.dev). However, hdmi->bridge.dev remains NULL until drm_bridge_attach() is called later. Since this patch explicitly supports decoupled drivers that register the bridge without immediately attaching it, does this guarantee a boot-time NULL pointer dereference if a display is connected? [Severity: High] This is a pre-existing issue, but there appears to be a devres registration order issue that leads to a use-after-free. The IRQ is requested via devm_request_threaded_irq() before the I2C adapter memory is allocated with devm_kzalloc(). During device teardown, devres cleans up resources in reverse order, meaning the I2C memory is freed while the IRQ remains active. If a hardware interrupt fires during this teardown window, inno_hdmi_hardirq() will check the dangling pointer and call inno_hdmi_i2c_irq(), which accesses the already freed memory. Should the IRQ be requested after all resources it depends on are allocated? [ ... ] > +struct inno_hdmi *inno_hdmi_bind(struct device *dev, > + struct drm_encoder *encoder, > + const struct inno_hdmi_plat_data *plat_data) > +{ > + struct platform_device *pdev =3D to_platform_device(dev); > + struct inno_hdmi *hdmi; > + int ret; > + > + hdmi =3D inno_hdmi_probe(pdev, plat_data); > + if (IS_ERR(hdmi)) > + return hdmi; > + > + ret =3D drm_bridge_attach(encoder, &hdmi->bridge, NULL, > + DRM_BRIDGE_ATTACH_NO_CONNECTOR); > + if (ret) > + return ERR_PTR(ret); [Severity: High] This isn't a bug introduced by this patch, but if drm_bridge_attach() fails (for example, due to probe deferral of another bridge), this returns an error directly without explicitly destroying the devm_ resources allocated during inno_hdmi_probe(). Since devm_ allocations are tied to the component device's lifetime rather than the component bind cycle, won't this leak memory and accumulate duplicate IRQ registrations on each component bind retry? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260828-jh7110-cle= an-send-v2-0-331680c8b9d1@samsung.com?part=3D4 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 D3CDCC61DCB for ; Fri, 28 Aug 2026 14:01:21 +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=MYYHuLn0VQTBH62pNDk948t7i6VaYs4gmSTrQd0iXV0=; b=VYmz2+gmb5acMP n976jJctAzOsGlqof++RoNLrKxy9Sb42sj1aQGfgcXOveTOzWsPy2sFGHU8wE0/ByyWC2nAOESA9P my5Qqn8k62n0BFVhvhxHa/tHwV2dqtDTYg8p/thrmcPCmeDSSJMmgive21b84ay8SsNiCpn2o0qVr LOJs5hMNsSfh6a/zogEEfi2okmytNTRveM+B7Fl/jxmcJA0Xc0WWC7jgqGNfEyZByiPKVxF6ewqhV qSVqWs9SSAL/Lm4TtFhEivXBApCh0n2+W+RWp9LMgCWZ80yRlLYvg8PkaMWWMosJy6I+WpgUf14AK cioKOggIdO4yDvA7voOg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wzx8z-00000005vs8-2K5m; Fri, 28 Aug 2026 14:01:21 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wzx8w-00000005vrw-3OM7 for linux-phy@lists.infradead.org; Fri, 28 Aug 2026 14:01:20 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 29DF041153; Fri, 28 Aug 2026 14:01:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 64C641F000E9; Fri, 28 Aug 2026 14:01:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787925678; bh=9ekEJRd5FMjnbwKp4zU4Nj6ot2XimkwzMO04o1f9lNI=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=OB4qG1spJDL2GiHu0RseVakg4F52NZzuZ58eOik2Qse6ngpg+q9k0XVtXSLBLaFGB LIJjkW8sqG75c0PzNqzV6cZB7SMchalusi2EJXt0dCu+oh0lzwmT3HPl3/bG57wenN dx1jgKELEYB8ixjZCEukoKLehcVMq6TE8mG+mbNxDAGSTEIXdO3tOPUFYZzCvIiOq8 SmayeT6ieN8WKW5ZxedUizdQCcSz0Lvg8UbZkQ5woMNn2iZenLqYPP1tPQDjhA02+T MV52n0lSuhTiCk8ZdXZ7AJA+Y0WnzK9Te0GPIUqztdq9HOlF+PYYICC4qUV2pzgD2Y Z0egWlwxKxTlw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 04/15] drm/bridge: inno-hdmi: Split probe out of bind To: "Michal Wilczynski" Cc: conor+dt@kernel.org, vkoul@kernel.org, olteanv@gmail.com, devicetree@vger.kernel.org, robh@kernel.org, linux-phy@lists.infradead.org, mfd@lists.linux.dev, lee@kernel.org, dri-devel@lists.freedesktop.org, neil.armstrong@linaro.org, linux-clk@vger.kernel.org In-Reply-To: <20260828-jh7110-clean-send-v2-4-331680c8b9d1@samsung.com> References: <20260828-jh7110-clean-send-v2-0-331680c8b9d1@samsung.com> <20260828-jh7110-clean-send-v2-4-331680c8b9d1@samsung.com> Date: Fri, 28 Aug 2026 14:01:16 +0000 Message-Id: <20260828140117.64C641F000E9@smtp.kernel.org> X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list 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-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg NSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpOZXcgaXNzdWVzOgotIFtIaWdoXSBN aXNzaW5nIGBpbm5vX2hkbWlfcmVtb3ZlYCBpbXBsZW1lbnRhdGlvbiBsZWFkcyB0byBoYXJkd2Fy ZSBpbnRlcnJ1cHQgc3Rvcm1zIGFuZCB2aW9sYXRlcyBBUEkgY29udHJhY3QuCgpQcmUtZXhpc3Rp bmcgaXNzdWVzOgotIFtDcml0aWNhbF0gSFBEIElSUSBpcyByZXF1ZXN0ZWQgYW5kIGVuYWJsZWQg YmVmb3JlIGJyaWRnZSBhdHRhY2gsIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNl IGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSBbSGlnaF0gUmVzb3VyY2UgbGVhayBvZiBkZXZt Xy1tYW5hZ2VkIGFsbG9jYXRpb25zIGR1cmluZyBjb21wb25lbnQgYmluZCByZXRyaWVzLgotIFtI aWdoXSBUT0NUT1UgcmFjZSBleHBvc2luZyB0aGUgSTJDIGFkYXB0ZXIgdG8gdXNlcnNwYWNlIGJl Zm9yZSBpbnRlcm5hbCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZXMuCi0gW0hpZ2hdIFVzZS1hZnRl ci1mcmVlIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGR1 ZSB0byBpbmNvcnJlY3QgZGV2cmVzIHJlZ2lzdHJhdGlvbiBvcmRlci4KLS0KCmNvbW1pdCAzNTU2 MzBhM2Y3YmJmZTJkNTVkNjkwMjA0OGIzNWFmYzZjYjRkNThkCkF1dGhvcjogTWljaGFsIFdpbGN6 eW5za2kgPG0ud2lsY3p5bnNraUBzYW1zdW5nLmNvbT4KCmRybS9icmlkZ2U6IGlubm8taGRtaTog U3BsaXQgcHJvYmUgb3V0IG9mIGJpbmQKICAgIAppbm5vX2hkbWlfYmluZCgpIGJvdGggc2V0cyB1 cCB0aGUgYnJpZGdlIGFuZCBhdHRhY2hlcyBpdCB0byBhIERSTQplbmNvZGVyLiBBIHBsYXRmb3Jt IHdob3NlIEhETUkgY29udHJvbGxlciBpcyBhIGNoaWxkIG9mIGEgbGFyZ2VyIGRldmljZQpuZWVk cyB0aGUgZmlyc3QgaGFsZiB3aXRob3V0IHRoZSBzZWNvbmQsIHNpbmNlIGl0IHJlZ2lzdGVycyBh cyBpdHMgb3duCnBsYXRmb3JtIGRyaXZlciBhbmQgbGV0cyB0aGUgRFJNIGNvcmUgYmluZCB0aGUg YnJpZGdlIGxhdGVyLgogICAgCk1vdmUgdGhlIHNldHVwIGludG8gYSBuZXcgZXhwb3J0ZWQgaW5u b19oZG1pX3Byb2JlKCksIHdpdGggYSBtYXRjaGluZwppbm5vX2hkbWlfcmVtb3ZlKCksIGFuZCBy ZWR1Y2UgaW5ub19oZG1pX2JpbmQoKSB0byBhIHdyYXBwZXIgYXJvdW5kIGl0LgogICAgCk5vIGZ1 bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkLgoKPiBNb3ZlIHRoZSBzZXR1cCBpbnRvIGEgbmV3IGV4 cG9ydGVkIGlubm9faGRtaV9wcm9iZSgpLCB3aXRoIGEgbWF0Y2hpbmcKPiBpbm5vX2hkbWlfcmVt b3ZlKCksIGFuZCByZWR1Y2UgaW5ub19oZG1pX2JpbmQoKSB0byBhIHdyYXBwZXIgYXJvdW5kIGl0 LgoKW1NldmVyaXR5OiBIaWdoXQpUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgYWRkaW5nIGEg bWF0Y2hpbmcgaW5ub19oZG1pX3JlbW92ZSgpIGZ1bmN0aW9uLApidXQgaXQgZG9lcyBub3QgYXBw ZWFyIHRvIGJlIGltcGxlbWVudGVkIGluIHRoaXMgcGF0Y2guCgpXaXRob3V0IGFuIGV4cG9ydGVk IHJlbW92ZSBmdW5jdGlvbiB0byBzYWZlbHkgdGVhciBkb3duIHRoZSBoYXJkd2FyZSBhbmQKdW5t YXNrIGludGVycnVwdHMsIGNvdWxkIHRoaXMgbGVhZCB0byBoYXJkd2FyZSBpbnRlcnJ1cHQgc3Rv cm1zIGlmIHRoZQpwbGF0Zm9ybSBtb2R1bGUgaXMgcmVtb3ZlZCBvciB0aGUgZHJpdmVyIGlzIHVu Ym91bmQ/Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lubm8taGRtaS5j IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pbm5vLWhkbWkuYwo+IGluZGV4IDlhNjJiZjU5YTQw MzMuLjEyZmQyMDhkNWU4NTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9p bm5vLWhkbWkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaW5uby1oZG1pLmMKWyAu Li4gXQo+ICtzdHJ1Y3QgaW5ub19oZG1pICppbm5vX2hkbWlfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwKPiArCQkJCSAgY29uc3Qgc3RydWN0IGlubm9faGRtaV9wbGF0X2RhdGEg KnBsYXRfZGF0YSkKPiAgewo+IC0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3Bs YXRmb3JtX2RldmljZShkZXYpOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK CltTZXZlcml0eTogSGlnaF0KVGhpcyBpc24ndCBhIGJ1ZyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0 Y2gsIGJ1dCB0aGVyZSBhcHBlYXJzIHRvIGJlIGEKdGltZS1vZi1jaGVjayB0byB0aW1lLW9mLXVz ZSAoVE9DVE9VKSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgSTJDIGFkYXB0ZXIKcmVnaXN0cmF0aW9u IHdpdGhpbiB0aGlzIHNldHVwIHBhdGguCgpJbiBpbm5vX2hkbWlfaTJjX2FkYXB0ZXIoKSwgZGV2 bV9pMmNfYWRkX2FkYXB0ZXIoKSBwdWJsaXNoZXMgdGhlIGFkYXB0ZXIKdG8gdXNlcnNwYWNlIGJl Zm9yZSBhc3NpZ25pbmcgaGRtaS0+aTJjID0gaTJjLiBJZiBhIHVzZXJzcGFjZSB0b29sCmluaXRp YXRlcyBhbiBJMkMgdHJhbnNhY3Rpb24gY29uY3VycmVudGx5IGR1cmluZyB0aGlzIHNtYWxsIHdp bmRvdywKaW5ub19oZG1pX2kyY194ZmVyKCkgd2lsbCBhdHRlbXB0IHRvIGxvY2sgaTJjLT5sb2Nr IHVzaW5nIHRoZSBzdGlsbC1OVUxMCmhkbWktPmkyYyBwb2ludGVyLgoKQ2FuIHRoaXMgbGVhZCB0 byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZT8KCltTZXZlcml0eTogQ3JpdGljYWxdClRoaXMg aXMgYSBwcmUtZXhpc3RpbmcgaXNzdWUsIGJ1dCByZXF1ZXN0aW5nIHRoZSBJUlEgYmVmb3JlIHRo ZSBicmlkZ2UKaXMgYXR0YWNoZWQgc2VlbXMgdG8gY2F1c2UgYSBjcmFzaCBvbiBkZWNvdXBsZWQg cGxhdGZvcm1zLgoKRHVyaW5nIHRoZSBoYXJkd2FyZSBzZXR1cCBpbiB0aGlzIHBhdGgsIGRldm1f cmVxdWVzdF90aHJlYWRlZF9pcnEoKQpyZXF1ZXN0cyB0aGUgaG90cGx1ZyBpbnRlcnJ1cHQuIElm IGEgbW9uaXRvciBpcyBhbHJlYWR5IGNvbm5lY3RlZCwgdGhlCmludGVycnVwdCBjYW4gZmlyZSBp bW1lZGlhdGVseS4gVGhlIGhhbmRsZXIsIGlubm9faGRtaV9pcnEoKSwgdW5jb25kaXRpb25hbGx5 CmNhbGxzIGRybV9oZWxwZXJfaHBkX2lycV9ldmVudChoZG1pLT5icmlkZ2UuZGV2KS4gSG93ZXZl ciwgaGRtaS0+YnJpZGdlLmRldgpyZW1haW5zIE5VTEwgdW50aWwgZHJtX2JyaWRnZV9hdHRhY2go KSBpcyBjYWxsZWQgbGF0ZXIuCgpTaW5jZSB0aGlzIHBhdGNoIGV4cGxpY2l0bHkgc3VwcG9ydHMg ZGVjb3VwbGVkIGRyaXZlcnMgdGhhdCByZWdpc3Rlcgp0aGUgYnJpZGdlIHdpdGhvdXQgaW1tZWRp YXRlbHkgYXR0YWNoaW5nIGl0LCBkb2VzIHRoaXMgZ3VhcmFudGVlIGEgYm9vdC10aW1lCk5VTEwg cG9pbnRlciBkZXJlZmVyZW5jZSBpZiBhIGRpc3BsYXkgaXMgY29ubmVjdGVkPwoKW1NldmVyaXR5 OiBIaWdoXQpUaGlzIGlzIGEgcHJlLWV4aXN0aW5nIGlzc3VlLCBidXQgdGhlcmUgYXBwZWFycyB0 byBiZSBhIGRldnJlcyByZWdpc3RyYXRpb24Kb3JkZXIgaXNzdWUgdGhhdCBsZWFkcyB0byBhIHVz ZS1hZnRlci1mcmVlLgoKVGhlIElSUSBpcyByZXF1ZXN0ZWQgdmlhIGRldm1fcmVxdWVzdF90aHJl YWRlZF9pcnEoKSBiZWZvcmUgdGhlIEkyQwphZGFwdGVyIG1lbW9yeSBpcyBhbGxvY2F0ZWQgd2l0 aCBkZXZtX2t6YWxsb2MoKS4gRHVyaW5nIGRldmljZSB0ZWFyZG93biwKZGV2cmVzIGNsZWFucyB1 cCByZXNvdXJjZXMgaW4gcmV2ZXJzZSBvcmRlciwgbWVhbmluZyB0aGUgSTJDIG1lbW9yeSBpcyBm cmVlZAp3aGlsZSB0aGUgSVJRIHJlbWFpbnMgYWN0aXZlLgoKSWYgYSBoYXJkd2FyZSBpbnRlcnJ1 cHQgZmlyZXMgZHVyaW5nIHRoaXMgdGVhcmRvd24gd2luZG93LAppbm5vX2hkbWlfaGFyZGlycSgp IHdpbGwgY2hlY2sgdGhlIGRhbmdsaW5nIHBvaW50ZXIgYW5kIGNhbGwKaW5ub19oZG1pX2kyY19p cnEoKSwgd2hpY2ggYWNjZXNzZXMgdGhlIGFscmVhZHkgZnJlZWQgbWVtb3J5LgoKU2hvdWxkIHRo ZSBJUlEgYmUgcmVxdWVzdGVkIGFmdGVyIGFsbCByZXNvdXJjZXMgaXQgZGVwZW5kcyBvbiBhcmUg YWxsb2NhdGVkPwoKWyAuLi4gXQo+ICtzdHJ1Y3QgaW5ub19oZG1pICppbm5vX2hkbWlfYmluZChz dHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQkgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ ICsJCQkJIGNvbnN0IHN0cnVjdCBpbm5vX2hkbWlfcGxhdF9kYXRhICpwbGF0X2RhdGEpCj4gK3sK PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2 KTsKPiArCXN0cnVjdCBpbm5vX2hkbWkgKmhkbWk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWhkbWkg PSBpbm5vX2hkbWlfcHJvYmUocGRldiwgcGxhdF9kYXRhKTsKPiArCWlmIChJU19FUlIoaGRtaSkp Cj4gKwkJcmV0dXJuIGhkbWk7Cj4gKwo+ICsJcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goZW5jb2Rl ciwgJmhkbWktPmJyaWRnZSwgTlVMTCwKPiArCQkJCURSTV9CUklER0VfQVRUQUNIX05PX0NPTk5F Q1RPUik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7CgpbU2V2ZXJpdHk6 IEhpZ2hdClRoaXMgaXNuJ3QgYSBidWcgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBidXQgaWYg ZHJtX2JyaWRnZV9hdHRhY2goKSBmYWlscwooZm9yIGV4YW1wbGUsIGR1ZSB0byBwcm9iZSBkZWZl cnJhbCBvZiBhbm90aGVyIGJyaWRnZSksIHRoaXMgcmV0dXJucyBhbgplcnJvciBkaXJlY3RseSB3 aXRob3V0IGV4cGxpY2l0bHkgZGVzdHJveWluZyB0aGUgZGV2bV8gcmVzb3VyY2VzIGFsbG9jYXRl ZApkdXJpbmcgaW5ub19oZG1pX3Byb2JlKCkuCgpTaW5jZSBkZXZtXyBhbGxvY2F0aW9ucyBhcmUg dGllZCB0byB0aGUgY29tcG9uZW50IGRldmljZSdzIGxpZmV0aW1lIHJhdGhlcgp0aGFuIHRoZSBj b21wb25lbnQgYmluZCBjeWNsZSwgd29uJ3QgdGhpcyBsZWFrIG1lbW9yeSBhbmQgYWNjdW11bGF0 ZQpkdXBsaWNhdGUgSVJRIHJlZ2lzdHJhdGlvbnMgb24gZWFjaCBjb21wb25lbnQgYmluZCByZXRy eT8KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0Y2hz ZXQvMjAyNjA4Mjgtamg3MTEwLWNsZWFuLXNlbmQtdjItMC0zMzE2ODBjOGI5ZDFAc2Ftc3VuZy5j b20/cGFydD00CgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1waHkK