From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9F3E6231832; Thu, 2 Oct 2025 15:31:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759419060; cv=none; b=f0RT6Tl/9Vx492XhHsrnT5M/jvN/lIuvPuigvFd0S1m4pOU1Y81asDaLU5mb58oK+w5ZUsb5LL7lB7bx9MUhUM3dN2ISqf1rVSDKGr552nBEfw8SbK0gMkTlHc2lGkt9fWVUPDWfzjGm7eYSNzZjjOUKcS+oFBVBI3UiLwaWNL8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759419060; c=relaxed/simple; bh=g+fY7Z++hADQkJDHrFpELN8lkmzMeAn0Bo+wPSzdUp8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=EAoDdBk2hlu/o6jNKg2sjzMXxrX0oI9koAZ5/t0ZQ4JXPLMWnyWw1K2EnmPE9ILuHS96/UsAHdBUme8VJ9qhi4LJaFjtul3ZsHhvYSxNqKs8IUW4CF0CZ74k8njBN0shjhQiuJPi+n1wuk7SL9ZdRumPKuAw+uZZL85Ofs5rdVc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EGh2gGLe; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EGh2gGLe" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3EA69C4CEF4; Thu, 2 Oct 2025 15:30:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1759419060; bh=g+fY7Z++hADQkJDHrFpELN8lkmzMeAn0Bo+wPSzdUp8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EGh2gGLezUtH/xKN1jTwFYa4KdD41FZM6mA9Oqfq/ja/OykZr/Vv03BSaO6wo7lsu u0UADqnDzVBEi7Z/98yF2CHfNE6Gj6Z4bh7MhqPMz5FlVkGlqU+Dxio3Bbh154gK5P N5cpbuv/tXj5mZBnUZxuE0Fe/M0ixwwsMbrh4mD8R6lAaK56Vpa+frfVP3z0/8y4E9 o4bX+s1QWSF69ffEwUf2aAZKDIs5WgdcqbXV9bhIVPO8WfNdEWRNsO5yiJrn6GXfI1 2H7n0bZQSG9Q1IKqM85RCYTMTr6FhSCApUW67qda1nUdjDwlGMRT4togUlGNkxvBt0 1inEywy7M0S/Q== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Kees Cook , Linux Kernel Functional Testing , Bjorn Helgaas , Arnd Bergmann , Sasha Levin , paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, linux-pci@vger.kernel.org, linux-riscv@lists.infradead.org Subject: [PATCH AUTOSEL 6.17-6.12] PCI: Test for bit underflow in pcie_set_readrq() Date: Thu, 2 Oct 2025 11:30:12 -0400 Message-ID: <20251002153025.2209281-25-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251002153025.2209281-1-sashal@kernel.org> References: <20251002153025.2209281-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.17 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Kees Cook [ Upstream commit 00e58ff924b3a684b076f9512fe2753be87b50e1 ] In preparation for the future commit ("bitops: Add __attribute_const__ to generic ffs()-family implementations"), which allows GCC's value range tracker to see past ffs(), GCC 8 on ARM thinks that it might be possible that "ffs(rq) - 8" used here: v = FIELD_PREP(PCI_EXP_DEVCTL_READRQ, ffs(rq) - 8); could wrap below 0, leading to a very large value, which would be out of range for the FIELD_PREP() usage: drivers/pci/pci.c: In function 'pcie_set_readrq': include/linux/compiler_types.h:572:38: error: call to '__compiletime_assert_471' declared with attribute error: FIELD_PREP: value too large for the field ... drivers/pci/pci.c:5896:6: note: in expansion of macro 'FIELD_PREP' v = FIELD_PREP(PCI_EXP_DEVCTL_READRQ, ffs(rq) - 8); ^~~~~~~~~~ If the result of the ffs() is bounds checked before being used in FIELD_PREP(), the value tracker seems happy again. :) Reported-by: Linux Kernel Functional Testing Closes: https://lore.kernel.org/linux-pci/CA+G9fYuysVr6qT8bjF6f08WLyCJRG7aXAeSd2F7=zTaHHd7L+Q@mail.gmail.com/ Acked-by: Bjorn Helgaas Acked-by: Arnd Bergmann Link: https://lore.kernel.org/r/20250905052836.work.425-kees@kernel.org Signed-off-by: Kees Cook Signed-off-by: Sasha Levin --- LLM Generated explanations, may be completely bogus: Based on my comprehensive analysis, here is my determination: ## Backport Status: **YES** ### Extensive Analysis: #### Nature of the Fix: This commit adds a defensive check in `pcie_set_readrq()` to prevent a potential bit underflow when computing `ffs(rq) - 8`. Specifically, it: 1. Stores the result of `ffs(rq)` in a new variable `firstbit` 2. Adds a check: `if (firstbit < 8) return -EINVAL;` 3. Uses `firstbit - 8` instead of `ffs(rq) - 8` in the FIELD_PREP macro #### Root Cause & Context: This is **not a runtime bug fix** - it's a **build fix** triggered by another optimization commit. The bitops commit (50675b8f5bd4e "bitops: Add __attribute_const__ to generic ffs()-family implementations") adds `__attribute_const__` to ffs() functions, enabling GCC's value range tracker to perform better static analysis. However, GCC-8's conservative analysis on ARM, RISCV, and MIPS architectures incorrectly determines that `ffs(rq) - 8` could underflow, causing a **compilation error** (not a warning): ``` drivers/pci/pci.c: In function 'pcie_set_readrq': include/linux/compiler_types.h:572:38: error: call to '__compiletime_assert_471' declared with attribute error: FIELD_PREP: value too large for the field ``` #### Why the Compiler is Wrong (but we still need to fix it): Examining the code flow in `pcie_set_readrq()` (drivers/pci/pci.c:5931-5968): 1. Initial validation: `if (rq < 128 || rq > 4096 || !is_power_of_2(rq))` ensures rq ≥ 128 2. Performance mode clamping: `if (mps < rq) rq = mps;` where mps comes from `pcie_get_mps()` 3. `pcie_get_mps()` returns `128 << FIELD_GET(...)`, which is always ≥ 128 (verified at line 5976-5984) 4. Therefore, `ffs(rq) >= ffs(128) = 8`, so underflow is impossible However, since commit f67577118d115 (2013), `pcie_get_mps()` never returns an error, always returning valid values ≥ 128. The compiler cannot prove this through interprocedural analysis. #### Critical Dependency: This commit is **tightly coupled** with the bitops commit. Evidence: - Both commits are signed off by Sasha Levin (autosel backports) - They appear consecutively in the git history (50675b8f5bd4e → 5385aceb86f2f) - The commit message explicitly states: "In preparation for the future commit" - Without this fix, **builds will fail** on GCC-8 ARM/RISCV/MIPS after bitops changes #### Risk Assessment: **Minimal Risk:** - Small, localized change (6 lines added in one function) - Adds defensive validation that cannot break existing functionality - For all valid inputs (rq ≥ 128), the check passes through - Only rejects values that would have caused incorrect behavior anyway - No performance impact - No changes to critical kernel subsystems beyond PCI #### Backporting Justification: 1. **Mandatory dependency**: Required if bitops commit is backported (which it is - commit 50675b8f5bd4e) 2. **Build fix**: Prevents compilation failures on supported compiler configurations 3. **Low risk**: Defensive check with no behavior change for valid inputs 4. **Follows stable rules**: Small, contained fix with clear purpose 5. **Multiple architectures affected**: ARM, RISCV, MIPS with GCC-8 6. **Upstream acceptance**: Acked by PCI maintainer (Bjorn Helgaas) and Arnd Bergmann #### Supporting Evidence: - Reported by: Linux Kernel Functional Testing (LKFT) - Affects: GCC-8 on arm, riscv, mips architectures - First seen: Linux 6.17.0-rc3-next-20250828 - Bisected to: bitops __attribute_const__ commit - Acked-by: Bjorn Helgaas, Arnd Bergmann ### Conclusion: **YES - This commit should be backported** as it's a necessary build fix that must accompany the bitops optimization commit. Without it, stable kernels with the bitops changes will fail to build on GCC-8 ARM/RISCV/MIPS configurations, breaking supported build environments. The fix is minimal, defensive, and poses negligible regression risk. drivers/pci/pci.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index b0f4d98036cdd..005b92e6585e9 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5932,6 +5932,7 @@ int pcie_set_readrq(struct pci_dev *dev, int rq) { u16 v; int ret; + unsigned int firstbit; struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus); if (rq < 128 || rq > 4096 || !is_power_of_2(rq)) @@ -5949,7 +5950,10 @@ int pcie_set_readrq(struct pci_dev *dev, int rq) rq = mps; } - v = FIELD_PREP(PCI_EXP_DEVCTL_READRQ, ffs(rq) - 8); + firstbit = ffs(rq); + if (firstbit < 8) + return -EINVAL; + v = FIELD_PREP(PCI_EXP_DEVCTL_READRQ, firstbit - 8); if (bridge->no_inc_mrrs) { int max_mrrs = pcie_get_readrq(dev); -- 2.51.0 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 0405CCAC5B8 for ; Thu, 2 Oct 2025 15:31:10 +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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=bP0BPTI1W4Nx+C8CR9EZckT9RCWj4HIs4FjQpWhaQyA=; b=4q6/NYm6feQZTn OCMEGEfvsa9RQUZ61WIgfqxFvcTMStRh+zm/5/bMIy3CytRoM6UlBL4THDJvEe5vgsQgO6/GSJj9F 97/RRGl0+GU+rXbVxdXsy2LWwe7TQD1R5zl/K2mh88oeWkEv9vIL/68hFoYXjbo4gvuFKCJSjr/h7 bIq0qDkUWLlFev8gm+L78DoFwEPt63i/b8xt5TGK5YAV5Qz5NBrtHZ/A6eLmHVzCZWYHYCTZ3blQ2 LH/OXrWI1fwYgRhneOkYquyJsXNwx06dA1F5y1rgoez/RO5YyD2hCWgdvO8pu52ANaI9vhkbascS4 pLIBOXWurjdBDosfQCrA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v4LGp-0000000Aj9v-3TvK; Thu, 02 Oct 2025 15:31:03 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v4LGm-0000000Aj8Y-3yqy for linux-riscv@lists.infradead.org; Thu, 02 Oct 2025 15:31:02 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 9C788451FD; Thu, 2 Oct 2025 15:31:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3EA69C4CEF4; Thu, 2 Oct 2025 15:30:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1759419060; bh=g+fY7Z++hADQkJDHrFpELN8lkmzMeAn0Bo+wPSzdUp8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EGh2gGLezUtH/xKN1jTwFYa4KdD41FZM6mA9Oqfq/ja/OykZr/Vv03BSaO6wo7lsu u0UADqnDzVBEi7Z/98yF2CHfNE6Gj6Z4bh7MhqPMz5FlVkGlqU+Dxio3Bbh154gK5P N5cpbuv/tXj5mZBnUZxuE0Fe/M0ixwwsMbrh4mD8R6lAaK56Vpa+frfVP3z0/8y4E9 o4bX+s1QWSF69ffEwUf2aAZKDIs5WgdcqbXV9bhIVPO8WfNdEWRNsO5yiJrn6GXfI1 2H7n0bZQSG9Q1IKqM85RCYTMTr6FhSCApUW67qda1nUdjDwlGMRT4togUlGNkxvBt0 1inEywy7M0S/Q== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Kees Cook , Linux Kernel Functional Testing , Bjorn Helgaas , Arnd Bergmann , Sasha Levin , paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, linux-pci@vger.kernel.org, linux-riscv@lists.infradead.org Subject: [PATCH AUTOSEL 6.17-6.12] PCI: Test for bit underflow in pcie_set_readrq() Date: Thu, 2 Oct 2025 11:30:12 -0400 Message-ID: <20251002153025.2209281-25-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251002153025.2209281-1-sashal@kernel.org> References: <20251002153025.2209281-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.17 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251002_083101_033165_2C767BA5 X-CRM114-Status: GOOD ( 19.08 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org RnJvbTogS2VlcyBDb29rIDxrZWVzQGtlcm5lbC5vcmc+CgpbIFVwc3RyZWFtIGNvbW1pdCAwMGU1 OGZmOTI0YjNhNjg0YjA3NmY5NTEyZmUyNzUzYmU4N2I1MGUxIF0KCkluIHByZXBhcmF0aW9uIGZv ciB0aGUgZnV0dXJlIGNvbW1pdCAoImJpdG9wczogQWRkIF9fYXR0cmlidXRlX2NvbnN0X18gdG8g Z2VuZXJpYwpmZnMoKS1mYW1pbHkgaW1wbGVtZW50YXRpb25zIiksIHdoaWNoIGFsbG93cyBHQ0Mn cyB2YWx1ZSByYW5nZSB0cmFja2VyCnRvIHNlZSBwYXN0IGZmcygpLCBHQ0MgOCBvbiBBUk0gdGhp bmtzIHRoYXQgaXQgbWlnaHQgYmUgcG9zc2libGUgdGhhdAoiZmZzKHJxKSAtIDgiIHVzZWQgaGVy ZToKCgl2ID0gRklFTERfUFJFUChQQ0lfRVhQX0RFVkNUTF9SRUFEUlEsIGZmcyhycSkgLSA4KTsK CmNvdWxkIHdyYXAgYmVsb3cgMCwgbGVhZGluZyB0byBhIHZlcnkgbGFyZ2UgdmFsdWUsIHdoaWNo IHdvdWxkIGJlIG91dCBvZgpyYW5nZSBmb3IgdGhlIEZJRUxEX1BSRVAoKSB1c2FnZToKCmRyaXZl cnMvcGNpL3BjaS5jOiBJbiBmdW5jdGlvbiAncGNpZV9zZXRfcmVhZHJxJzoKaW5jbHVkZS9saW51 eC9jb21waWxlcl90eXBlcy5oOjU3MjozODogZXJyb3I6IGNhbGwgdG8gJ19fY29tcGlsZXRpbWVf YXNzZXJ0XzQ3MScgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgZXJyb3I6IEZJRUxEX1BSRVA6IHZh bHVlIHRvbyBsYXJnZSBmb3IgdGhlIGZpZWxkCi4uLgpkcml2ZXJzL3BjaS9wY2kuYzo1ODk2OjY6 IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnRklFTERfUFJFUCcKICB2ID0gRklFTERfUFJF UChQQ0lfRVhQX0RFVkNUTF9SRUFEUlEsIGZmcyhycSkgLSA4KTsKICAgICAgXn5+fn5+fn5+fgoK SWYgdGhlIHJlc3VsdCBvZiB0aGUgZmZzKCkgaXMgYm91bmRzIGNoZWNrZWQgYmVmb3JlIGJlaW5n IHVzZWQgaW4KRklFTERfUFJFUCgpLCB0aGUgdmFsdWUgdHJhY2tlciBzZWVtcyBoYXBweSBhZ2Fp bi4gOikKClJlcG9ydGVkLWJ5OiBMaW51eCBLZXJuZWwgRnVuY3Rpb25hbCBUZXN0aW5nIDxsa2Z0 QGxpbmFyby5vcmc+CkNsb3NlczogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtcGNpL0NB K0c5Zll1eXNWcjZxVDhiakY2ZjA4V0x5Q0pSRzdhWEFlU2QyRjc9elRhSEhkN0wrUUBtYWlsLmdt YWlsLmNvbS8KQWNrZWQtYnk6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+CkFj a2VkLWJ5OiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgpMaW5rOiBodHRwczovL2xvcmUu a2VybmVsLm9yZy9yLzIwMjUwOTA1MDUyODM2LndvcmsuNDI1LWtlZXNAa2VybmVsLm9yZwpTaWdu ZWQtb2ZmLWJ5OiBLZWVzIENvb2sgPGtlZXNAa2VybmVsLm9yZz4KU2lnbmVkLW9mZi1ieTogU2Fz aGEgTGV2aW4gPHNhc2hhbEBrZXJuZWwub3JnPgotLS0KCkxMTSBHZW5lcmF0ZWQgZXhwbGFuYXRp b25zLCBtYXkgYmUgY29tcGxldGVseSBib2d1czoKCkJhc2VkIG9uIG15IGNvbXByZWhlbnNpdmUg YW5hbHlzaXMsIGhlcmUgaXMgbXkgZGV0ZXJtaW5hdGlvbjoKCiMjIEJhY2twb3J0IFN0YXR1czog KipZRVMqKgoKIyMjIEV4dGVuc2l2ZSBBbmFseXNpczoKCiMjIyMgTmF0dXJlIG9mIHRoZSBGaXg6 ClRoaXMgY29tbWl0IGFkZHMgYSBkZWZlbnNpdmUgY2hlY2sgaW4gYHBjaWVfc2V0X3JlYWRycSgp YCB0byBwcmV2ZW50IGEKcG90ZW50aWFsIGJpdCB1bmRlcmZsb3cgd2hlbiBjb21wdXRpbmcgYGZm cyhycSkgLSA4YC4gU3BlY2lmaWNhbGx5LCBpdDoKMS4gU3RvcmVzIHRoZSByZXN1bHQgb2YgYGZm cyhycSlgIGluIGEgbmV3IHZhcmlhYmxlIGBmaXJzdGJpdGAKMi4gQWRkcyBhIGNoZWNrOiBgaWYg KGZpcnN0Yml0IDwgOCkgcmV0dXJuIC1FSU5WQUw7YAozLiBVc2VzIGBmaXJzdGJpdCAtIDhgIGlu c3RlYWQgb2YgYGZmcyhycSkgLSA4YCBpbiB0aGUgRklFTERfUFJFUCBtYWNybwoKIyMjIyBSb290 IENhdXNlICYgQ29udGV4dDoKVGhpcyBpcyAqKm5vdCBhIHJ1bnRpbWUgYnVnIGZpeCoqIC0gaXQn cyBhICoqYnVpbGQgZml4KiogdHJpZ2dlcmVkIGJ5CmFub3RoZXIgb3B0aW1pemF0aW9uIGNvbW1p dC4gVGhlIGJpdG9wcyBjb21taXQgKDUwNjc1YjhmNWJkNGUgImJpdG9wczoKQWRkIF9fYXR0cmli dXRlX2NvbnN0X18gdG8gZ2VuZXJpYyBmZnMoKS1mYW1pbHkgaW1wbGVtZW50YXRpb25zIikgYWRk cwpgX19hdHRyaWJ1dGVfY29uc3RfX2AgdG8gZmZzKCkgZnVuY3Rpb25zLCBlbmFibGluZyBHQ0Mn cyB2YWx1ZSByYW5nZQp0cmFja2VyIHRvIHBlcmZvcm0gYmV0dGVyIHN0YXRpYyBhbmFseXNpcy4g SG93ZXZlciwgR0NDLTgncyBjb25zZXJ2YXRpdmUKYW5hbHlzaXMgb24gQVJNLCBSSVNDViwgYW5k IE1JUFMgYXJjaGl0ZWN0dXJlcyBpbmNvcnJlY3RseSBkZXRlcm1pbmVzCnRoYXQgYGZmcyhycSkg LSA4YCBjb3VsZCB1bmRlcmZsb3csIGNhdXNpbmcgYSAqKmNvbXBpbGF0aW9uIGVycm9yKiogKG5v dAphIHdhcm5pbmcpOgoKYGBgCmRyaXZlcnMvcGNpL3BjaS5jOiBJbiBmdW5jdGlvbiAncGNpZV9z ZXRfcmVhZHJxJzoKaW5jbHVkZS9saW51eC9jb21waWxlcl90eXBlcy5oOjU3MjozODogZXJyb3I6 IGNhbGwgdG8KJ19fY29tcGlsZXRpbWVfYXNzZXJ0XzQ3MScKZGVjbGFyZWQgd2l0aCBhdHRyaWJ1 dGUgZXJyb3I6IEZJRUxEX1BSRVA6IHZhbHVlIHRvbyBsYXJnZSBmb3IgdGhlIGZpZWxkCmBgYAoK IyMjIyBXaHkgdGhlIENvbXBpbGVyIGlzIFdyb25nIChidXQgd2Ugc3RpbGwgbmVlZCB0byBmaXgg aXQpOgpFeGFtaW5pbmcgdGhlIGNvZGUgZmxvdyBpbiBgcGNpZV9zZXRfcmVhZHJxKClgCihkcml2 ZXJzL3BjaS9wY2kuYzo1OTMxLTU5NjgpOgoxLiBJbml0aWFsIHZhbGlkYXRpb246IGBpZiAocnEg PCAxMjggfHwgcnEgPiA0MDk2IHx8CiAgICFpc19wb3dlcl9vZl8yKHJxKSlgIGVuc3VyZXMgcnEg 4omlIDEyOAoyLiBQZXJmb3JtYW5jZSBtb2RlIGNsYW1waW5nOiBgaWYgKG1wcyA8IHJxKSBycSA9 IG1wcztgIHdoZXJlIG1wcyBjb21lcwogICBmcm9tIGBwY2llX2dldF9tcHMoKWAKMy4gYHBjaWVf Z2V0X21wcygpYCByZXR1cm5zIGAxMjggPDwgRklFTERfR0VUKC4uLilgLCB3aGljaCBpcyBhbHdh eXMg4omlCiAgIDEyOCAodmVyaWZpZWQgYXQgbGluZSA1OTc2LTU5ODQpCjQuIFRoZXJlZm9yZSwg YGZmcyhycSkgPj0gZmZzKDEyOCkgPSA4YCwgc28gdW5kZXJmbG93IGlzIGltcG9zc2libGUKCkhv d2V2ZXIsIHNpbmNlIGNvbW1pdCBmNjc1NzcxMThkMTE1ICgyMDEzKSwgYHBjaWVfZ2V0X21wcygp YCBuZXZlcgpyZXR1cm5zIGFuIGVycm9yLCBhbHdheXMgcmV0dXJuaW5nIHZhbGlkIHZhbHVlcyDi iaUgMTI4LiBUaGUgY29tcGlsZXIKY2Fubm90IHByb3ZlIHRoaXMgdGhyb3VnaCBpbnRlcnByb2Nl ZHVyYWwgYW5hbHlzaXMuCgojIyMjIENyaXRpY2FsIERlcGVuZGVuY3k6ClRoaXMgY29tbWl0IGlz ICoqdGlnaHRseSBjb3VwbGVkKiogd2l0aCB0aGUgYml0b3BzIGNvbW1pdC4gRXZpZGVuY2U6Ci0g Qm90aCBjb21taXRzIGFyZSBzaWduZWQgb2ZmIGJ5IFNhc2hhIExldmluIChhdXRvc2VsIGJhY2tw b3J0cykKLSBUaGV5IGFwcGVhciBjb25zZWN1dGl2ZWx5IGluIHRoZSBnaXQgaGlzdG9yeSAoNTA2 NzViOGY1YmQ0ZSDihpIKICA1Mzg1YWNlYjg2ZjJmKQotIFRoZSBjb21taXQgbWVzc2FnZSBleHBs aWNpdGx5IHN0YXRlczogIkluIHByZXBhcmF0aW9uIGZvciB0aGUgZnV0dXJlCiAgY29tbWl0Igot IFdpdGhvdXQgdGhpcyBmaXgsICoqYnVpbGRzIHdpbGwgZmFpbCoqIG9uIEdDQy04IEFSTS9SSVND Vi9NSVBTIGFmdGVyCiAgYml0b3BzIGNoYW5nZXMKCiMjIyMgUmlzayBBc3Nlc3NtZW50OgoqKk1p bmltYWwgUmlzazoqKgotIFNtYWxsLCBsb2NhbGl6ZWQgY2hhbmdlICg2IGxpbmVzIGFkZGVkIGlu IG9uZSBmdW5jdGlvbikKLSBBZGRzIGRlZmVuc2l2ZSB2YWxpZGF0aW9uIHRoYXQgY2Fubm90IGJy ZWFrIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkKLSBGb3IgYWxsIHZhbGlkIGlucHV0cyAocnEg4oml IDEyOCksIHRoZSBjaGVjayBwYXNzZXMgdGhyb3VnaAotIE9ubHkgcmVqZWN0cyB2YWx1ZXMgdGhh dCB3b3VsZCBoYXZlIGNhdXNlZCBpbmNvcnJlY3QgYmVoYXZpb3IgYW55d2F5Ci0gTm8gcGVyZm9y bWFuY2UgaW1wYWN0Ci0gTm8gY2hhbmdlcyB0byBjcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtcyBi ZXlvbmQgUENJCgojIyMjIEJhY2twb3J0aW5nIEp1c3RpZmljYXRpb246CjEuICoqTWFuZGF0b3J5 IGRlcGVuZGVuY3kqKjogUmVxdWlyZWQgaWYgYml0b3BzIGNvbW1pdCBpcyBiYWNrcG9ydGVkCiAg ICh3aGljaCBpdCBpcyAtIGNvbW1pdCA1MDY3NWI4ZjViZDRlKQoyLiAqKkJ1aWxkIGZpeCoqOiBQ cmV2ZW50cyBjb21waWxhdGlvbiBmYWlsdXJlcyBvbiBzdXBwb3J0ZWQgY29tcGlsZXIKICAgY29u ZmlndXJhdGlvbnMKMy4gKipMb3cgcmlzayoqOiBEZWZlbnNpdmUgY2hlY2sgd2l0aCBubyBiZWhh dmlvciBjaGFuZ2UgZm9yIHZhbGlkCiAgIGlucHV0cwo0LiAqKkZvbGxvd3Mgc3RhYmxlIHJ1bGVz Kio6IFNtYWxsLCBjb250YWluZWQgZml4IHdpdGggY2xlYXIgcHVycG9zZQo1LiAqKk11bHRpcGxl IGFyY2hpdGVjdHVyZXMgYWZmZWN0ZWQqKjogQVJNLCBSSVNDViwgTUlQUyB3aXRoIEdDQy04CjYu ICoqVXBzdHJlYW0gYWNjZXB0YW5jZSoqOiBBY2tlZCBieSBQQ0kgbWFpbnRhaW5lciAoQmpvcm4g SGVsZ2FhcykgYW5kCiAgIEFybmQgQmVyZ21hbm4KCiMjIyMgU3VwcG9ydGluZyBFdmlkZW5jZToK LSBSZXBvcnRlZCBieTogTGludXggS2VybmVsIEZ1bmN0aW9uYWwgVGVzdGluZyAoTEtGVCkKLSBB ZmZlY3RzOiBHQ0MtOCBvbiBhcm0sIHJpc2N2LCBtaXBzIGFyY2hpdGVjdHVyZXMKLSBGaXJzdCBz ZWVuOiBMaW51eCA2LjE3LjAtcmMzLW5leHQtMjAyNTA4MjgKLSBCaXNlY3RlZCB0bzogYml0b3Bz IF9fYXR0cmlidXRlX2NvbnN0X18gY29tbWl0Ci0gQWNrZWQtYnk6IEJqb3JuIEhlbGdhYXMsIEFy bmQgQmVyZ21hbm4KCiMjIyBDb25jbHVzaW9uOgoqKllFUyAtIFRoaXMgY29tbWl0IHNob3VsZCBi ZSBiYWNrcG9ydGVkKiogYXMgaXQncyBhIG5lY2Vzc2FyeSBidWlsZCBmaXgKdGhhdCBtdXN0IGFj Y29tcGFueSB0aGUgYml0b3BzIG9wdGltaXphdGlvbiBjb21taXQuIFdpdGhvdXQgaXQsIHN0YWJs ZQprZXJuZWxzIHdpdGggdGhlIGJpdG9wcyBjaGFuZ2VzIHdpbGwgZmFpbCB0byBidWlsZCBvbiBH Q0MtOApBUk0vUklTQ1YvTUlQUyBjb25maWd1cmF0aW9ucywgYnJlYWtpbmcgc3VwcG9ydGVkIGJ1 aWxkIGVudmlyb25tZW50cy4KVGhlIGZpeCBpcyBtaW5pbWFsLCBkZWZlbnNpdmUsIGFuZCBwb3Nl cyBuZWdsaWdpYmxlIHJlZ3Jlc3Npb24gcmlzay4KCiBkcml2ZXJzL3BjaS9wY2kuYyB8IDYgKysr KystCiAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBiMGY0 ZDk4MDM2Y2RkLi4wMDViOTJlNjU4NWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYwor KysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNTkzMiw2ICs1OTMyLDcgQEAgaW50IHBjaWVfc2V0 X3JlYWRycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcnEpCiB7CiAJdTE2IHY7CiAJaW50IHJl dDsKKwl1bnNpZ25lZCBpbnQgZmlyc3RiaXQ7CiAJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJp ZGdlID0gcGNpX2ZpbmRfaG9zdF9icmlkZ2UoZGV2LT5idXMpOwogCiAJaWYgKHJxIDwgMTI4IHx8 IHJxID4gNDA5NiB8fCAhaXNfcG93ZXJfb2ZfMihycSkpCkBAIC01OTQ5LDcgKzU5NTAsMTAgQEAg aW50IHBjaWVfc2V0X3JlYWRycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcnEpCiAJCQlycSA9 IG1wczsKIAl9CiAKLQl2ID0gRklFTERfUFJFUChQQ0lfRVhQX0RFVkNUTF9SRUFEUlEsIGZmcyhy cSkgLSA4KTsKKwlmaXJzdGJpdCA9IGZmcyhycSk7CisJaWYgKGZpcnN0Yml0IDwgOCkKKwkJcmV0 dXJuIC1FSU5WQUw7CisJdiA9IEZJRUxEX1BSRVAoUENJX0VYUF9ERVZDVExfUkVBRFJRLCBmaXJz dGJpdCAtIDgpOwogCiAJaWYgKGJyaWRnZS0+bm9faW5jX21ycnMpIHsKIAkJaW50IG1heF9tcnJz ID0gcGNpZV9nZXRfcmVhZHJxKGRldik7Ci0tIAoyLjUxLjAKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGlu dXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==