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 EC7B122E3E9; Thu, 2 Oct 2025 15:30:58 +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=1759419059; cv=none; b=F6ZGgWZg1qPuZH+STsu1SPNxUUAtJa8R8tIDs9/xg5acr4A/y54E0s3n27znDzaamSWF5tsv9H04AyyqChm089uaQik968xiO8JTYiXcoDMKiqZ6BZ4atXPhlKdcI/7I0v/TsrZ9U3tylXIxHPWvGiI77Vre87uCLtJ9kjeasZI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759419059; c=relaxed/simple; bh=RZRhAPwruDBinADBth5fXOP0gpo3S6ZqgzdwnXe25xI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pV7KgiKdW9ruPcHbbsplAZg/0OZYZEdbTazIulF9xPkyi3WfNKAfEBy97C2X/bhW/5GniONSuxbakBa+tP0gAZbnl9Z+JtbFPq39IKzem39gic+EPKHyRlr5nKZG4DtlBUXTriwpmk3PXp3wfpaZwCQQ7YYezRLR9sOYsF6qUD4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BJTg+Rgy; 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="BJTg+Rgy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B894DC4CEF9; Thu, 2 Oct 2025 15:30:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1759419058; bh=RZRhAPwruDBinADBth5fXOP0gpo3S6ZqgzdwnXe25xI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BJTg+RgyOKe6pmjDZTGHq0zizZAAoDeqBotApCpsd2WDYvaVCNKq5H6yh3nTaBy3a evmdGCY4u5b4+xYM3ShAc2jFOaY8swmesZWGoD0OJpAeo9p6xsDACB44VXMpIay9kv FoU20f2l6465CRrLSAKE5M8eJ/GLs3EUe6AepiJKYubbStqedW9wJ+qXo9aTa+M89B lhZN+gAFXCIo/QEc8fizQFVf6k2qQqbgXxGy/UpKB6QTSrZQpw+T9WhIR+lPN3U8Tr 7Psn53rwGqR+79pV7YG0NlEA3CX4vOYLeYiwmm/BUZPh6ixt/ruTACc/fc2tRGYNJe WkRwR3/yMAhmw== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Paul Walmsley , Sasha Levin , paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org Subject: [PATCH AUTOSEL 6.17-6.16] riscv: cpufeature: add validation for zfa, zfh and zfhmin Date: Thu, 2 Oct 2025 11:30:11 -0400 Message-ID: <20251002153025.2209281-24-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 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.17 Content-Transfer-Encoding: 8bit From: Clément Léger [ Upstream commit 2e2cf5581fccc562f7faf174ffb9866fed5cafbd ] These extensions depends on the F one. Add a validation callback checking for the F extension to be present. Now that extensions are correctly reported using the F/D presence, we can remove the has_fpu() check in hwprobe_isa_ext0(). Signed-off-by: Clément Léger Reviewed-by: Conor Dooley Link: https://lore.kernel.org/r/20250527100001.33284-1-cleger@rivosinc.com Signed-off-by: Paul Walmsley Signed-off-by: Sasha Levin --- LLM Generated explanations, may be completely bogus: Based on my comprehensive analysis of this commit, here is my assessment: **Backport Status: YES** ## Extensive Analysis ### What This Commit Fixes This commit addresses **incorrect CPU feature reporting** for three RISC-V floating-point extensions (ZFA, ZFH, ZFHMIN) that were being exposed to userspace without proper validation that their required dependency (the F extension) is present. ### Code Changes Analysis The commit makes two key changes: 1. **In arch/riscv/kernel/cpufeature.c (lines 477-480)**: - Changes ZFA, ZFH, and ZFHMIN from `__RISCV_ISA_EXT_DATA` to `__RISCV_ISA_EXT_DATA_VALIDATE` - Adds `riscv_ext_f_depends` validation callback (lines 83-90) which checks that the F extension is available before allowing these extensions to be reported - The validation function returns `-EPROBE_DEFER` if F is not present, preventing incorrect feature reporting 2. **In arch/riscv/kernel/sys_hwprobe.c (lines 156-163)**: - Removes the `has_fpu()` conditional check that was previously gating these extensions - This is safe because the validation is now properly handled in cpufeature.c through the validation callbacks ### Why This is a Bug Fix According to the RISC-V ISA specification: - **ZFA** (Additional Floating-Point Instructions) requires F - **ZFH** (Half-Precision Floating-Point) requires F - **ZFHMIN** (Minimal Half-Precision Floating-Point) requires F Without this fix, the kernel could incorrectly report these extensions as available even when the base F extension is not present. This violates the ISA specification and could lead to: 1. **Incorrect userspace behavior**: Applications using hwprobe() might detect these extensions and attempt to use instructions that aren't supported 2. **Illegal instruction exceptions**: If userspace tries to execute these instructions without F support 3. **Inconsistent CPU capability reporting**: The kernel would report capabilities that the hardware doesn't actually support ### Context from Related Commits This commit is part of a larger validation effort: - **e186c28dda11e** (Feb 2025): Introduced `riscv_ext_f_depends` validation for ZFBFMIN - **12e7fbb6a84e6** (Mar 2025): Added F & D extension validation checks - **004961843389e** (Apr 2025): Merged the validation series - **2e2cf5581fccc** (May 2025): This commit - completes the validation by adding it for ZFA/ZFH/ZFHMIN which were missed The commit message states: "Now that extensions are correctly reported using the F/D presence, we can remove the has_fpu() check" - indicating this is cleanup that follows the proper validation infrastructure being put in place. ### Backporting Criteria Assessment ✅ **Fixes a bug affecting users**: Yes - incorrect CPU feature reporting can cause userspace applications to malfunction ✅ **Small and contained**: Yes - only 14 lines changed across 2 files, following an established pattern ✅ **Clear side effects**: No unexpected side effects - makes reporting more correct ✅ **No architectural changes**: No - uses existing validation infrastructure ✅ **Minimal regression risk**: Very low - the change makes feature reporting more conservative (won't report features unless dependencies are met) ✅ **Confined to subsystem**: Yes - only affects RISC-V architecture code ### Conclusion This commit should be backported because it: 1. Fixes incorrect CPU capability reporting that violates the RISC-V ISA specification 2. Prevents potential illegal instruction exceptions in userspace 3. Is small, focused, and low-risk 4. Follows the stable tree rules for important bug fixes with minimal risk 5. Completes a validation series that was already merged upstream The fix ensures RISC-V systems correctly report their capabilities to userspace, which is critical for proper system operation. arch/riscv/kernel/cpufeature.c | 6 +++--- arch/riscv/kernel/sys_hwprobe.c | 14 ++++++-------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c index 743d53415572e..67b59699357da 100644 --- a/arch/riscv/kernel/cpufeature.c +++ b/arch/riscv/kernel/cpufeature.c @@ -474,10 +474,10 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = { __RISCV_ISA_EXT_DATA(zacas, RISCV_ISA_EXT_ZACAS), __RISCV_ISA_EXT_DATA(zalrsc, RISCV_ISA_EXT_ZALRSC), __RISCV_ISA_EXT_DATA(zawrs, RISCV_ISA_EXT_ZAWRS), - __RISCV_ISA_EXT_DATA(zfa, RISCV_ISA_EXT_ZFA), + __RISCV_ISA_EXT_DATA_VALIDATE(zfa, RISCV_ISA_EXT_ZFA, riscv_ext_f_depends), __RISCV_ISA_EXT_DATA_VALIDATE(zfbfmin, RISCV_ISA_EXT_ZFBFMIN, riscv_ext_f_depends), - __RISCV_ISA_EXT_DATA(zfh, RISCV_ISA_EXT_ZFH), - __RISCV_ISA_EXT_DATA(zfhmin, RISCV_ISA_EXT_ZFHMIN), + __RISCV_ISA_EXT_DATA_VALIDATE(zfh, RISCV_ISA_EXT_ZFH, riscv_ext_f_depends), + __RISCV_ISA_EXT_DATA_VALIDATE(zfhmin, RISCV_ISA_EXT_ZFHMIN, riscv_ext_f_depends), __RISCV_ISA_EXT_DATA(zca, RISCV_ISA_EXT_ZCA), __RISCV_ISA_EXT_DATA_VALIDATE(zcb, RISCV_ISA_EXT_ZCB, riscv_ext_zca_depends), __RISCV_ISA_EXT_DATA_VALIDATE(zcd, RISCV_ISA_EXT_ZCD, riscv_ext_zcd_validate), diff --git a/arch/riscv/kernel/sys_hwprobe.c b/arch/riscv/kernel/sys_hwprobe.c index 0b170e18a2beb..3e9259790816e 100644 --- a/arch/riscv/kernel/sys_hwprobe.c +++ b/arch/riscv/kernel/sys_hwprobe.c @@ -153,14 +153,12 @@ static void hwprobe_isa_ext0(struct riscv_hwprobe *pair, EXT_KEY(ZVKT); } - if (has_fpu()) { - EXT_KEY(ZCD); - EXT_KEY(ZCF); - EXT_KEY(ZFA); - EXT_KEY(ZFBFMIN); - EXT_KEY(ZFH); - EXT_KEY(ZFHMIN); - } + EXT_KEY(ZCD); + EXT_KEY(ZCF); + EXT_KEY(ZFA); + EXT_KEY(ZFBFMIN); + EXT_KEY(ZFH); + EXT_KEY(ZFHMIN); if (IS_ENABLED(CONFIG_RISCV_ISA_SUPM)) EXT_KEY(SUPM); -- 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 E74A5CAC5B8 for ; Thu, 2 Oct 2025 15:31:06 +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=CXbuDqHyNr0Axu/6PSN7+RQwtMdRdurM4snJhEyDbgI=; b=dEnaKeICtvRmFJ wJvki6DGjSn1lu2QVpkUMFoCOBd/He8gvQgSKBnuiQwjp6evoK6uqSotCOgVy1W+J7GrI5/PNmUft cXPW8/YzG68hb/xjLctCOqSGp56qSj9Nc9ZHcWCDgqUAuuxNS58cUoXKq91XjVlEZzd1Ig5p8YIKH CvV5uImmJdX+tLOYzH7IygXkxg2i4KEt9v9WNPu8jntgm7MzXbDnTEmKvlPwmTqpr/Pabcf588zl+ jDkym33nKYPMWflYItsL/cZiEfvTiUN6dxnmpPPxklW7xgnVbFZllWa/ffuHSGuMUzkIZgDLyOgWJ xjj8ly4ZZgg2sAPOaDHA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v4LGn-0000000Aj8s-25Jw; Thu, 02 Oct 2025 15:31:01 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v4LGl-0000000Aj82-1J7a for linux-riscv@lists.infradead.org; Thu, 02 Oct 2025 15:31:00 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id EDC7448E3B; Thu, 2 Oct 2025 15:30:58 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B894DC4CEF9; Thu, 2 Oct 2025 15:30:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1759419058; bh=RZRhAPwruDBinADBth5fXOP0gpo3S6ZqgzdwnXe25xI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BJTg+RgyOKe6pmjDZTGHq0zizZAAoDeqBotApCpsd2WDYvaVCNKq5H6yh3nTaBy3a evmdGCY4u5b4+xYM3ShAc2jFOaY8swmesZWGoD0OJpAeo9p6xsDACB44VXMpIay9kv FoU20f2l6465CRrLSAKE5M8eJ/GLs3EUe6AepiJKYubbStqedW9wJ+qXo9aTa+M89B lhZN+gAFXCIo/QEc8fizQFVf6k2qQqbgXxGy/UpKB6QTSrZQpw+T9WhIR+lPN3U8Tr 7Psn53rwGqR+79pV7YG0NlEA3CX4vOYLeYiwmm/BUZPh6ixt/ruTACc/fc2tRGYNJe WkRwR3/yMAhmw== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Paul Walmsley , Sasha Levin , paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org Subject: [PATCH AUTOSEL 6.17-6.16] riscv: cpufeature: add validation for zfa, zfh and zfhmin Date: Thu, 2 Oct 2025 11:30:11 -0400 Message-ID: <20251002153025.2209281-24-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_083059_394986_75C4A64E X-CRM114-Status: GOOD ( 15.52 ) 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 RnJvbTogQ2zDqW1lbnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgoKWyBVcHN0cmVhbSBj b21taXQgMmUyY2Y1NTgxZmNjYzU2MmY3ZmFmMTc0ZmZiOTg2NmZlZDVjYWZiZCBdCgpUaGVzZSBl eHRlbnNpb25zIGRlcGVuZHMgb24gdGhlIEYgb25lLiBBZGQgYSB2YWxpZGF0aW9uIGNhbGxiYWNr CmNoZWNraW5nIGZvciB0aGUgRiBleHRlbnNpb24gdG8gYmUgcHJlc2VudC4gTm93IHRoYXQgZXh0 ZW5zaW9ucyBhcmUKY29ycmVjdGx5IHJlcG9ydGVkIHVzaW5nIHRoZSBGL0QgcHJlc2VuY2UsIHdl IGNhbiByZW1vdmUgdGhlCmhhc19mcHUoKSBjaGVjayBpbiBod3Byb2JlX2lzYV9leHQwKCkuCgpT aWduZWQtb2ZmLWJ5OiBDbMOpbWVudCBMw6lnZXIgPGNsZWdlckByaXZvc2luYy5jb20+ClJldmll d2VkLWJ5OiBDb25vciBEb29sZXkgPGNvbm9yLmRvb2xleUBtaWNyb2NoaXAuY29tPgpMaW5rOiBo dHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjUwNTI3MTAwMDAxLjMzMjg0LTEtY2xlZ2VyQHJp dm9zaW5jLmNvbQpTaWduZWQtb2ZmLWJ5OiBQYXVsIFdhbG1zbGV5IDxwandAa2VybmVsLm9yZz4K U2lnbmVkLW9mZi1ieTogU2FzaGEgTGV2aW4gPHNhc2hhbEBrZXJuZWwub3JnPgotLS0KCkxMTSBH ZW5lcmF0ZWQgZXhwbGFuYXRpb25zLCBtYXkgYmUgY29tcGxldGVseSBib2d1czoKCkJhc2VkIG9u IG15IGNvbXByZWhlbnNpdmUgYW5hbHlzaXMgb2YgdGhpcyBjb21taXQsIGhlcmUgaXMgbXkKYXNz ZXNzbWVudDoKCioqQmFja3BvcnQgU3RhdHVzOiBZRVMqKgoKIyMgRXh0ZW5zaXZlIEFuYWx5c2lz CgojIyMgV2hhdCBUaGlzIENvbW1pdCBGaXhlcwoKVGhpcyBjb21taXQgYWRkcmVzc2VzICoqaW5j b3JyZWN0IENQVSBmZWF0dXJlIHJlcG9ydGluZyoqIGZvciB0aHJlZQpSSVNDLVYgZmxvYXRpbmct cG9pbnQgZXh0ZW5zaW9ucyAoWkZBLCBaRkgsIFpGSE1JTikgdGhhdCB3ZXJlIGJlaW5nCmV4cG9z ZWQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgcHJvcGVyIHZhbGlkYXRpb24gdGhhdCB0aGVpciByZXF1 aXJlZApkZXBlbmRlbmN5ICh0aGUgRiBleHRlbnNpb24pIGlzIHByZXNlbnQuCgojIyMgQ29kZSBD aGFuZ2VzIEFuYWx5c2lzCgpUaGUgY29tbWl0IG1ha2VzIHR3byBrZXkgY2hhbmdlczoKCjEuICoq SW4gYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jIChsaW5lcyA0NzctNDgwKSoqOgogICAt IENoYW5nZXMgWkZBLCBaRkgsIGFuZCBaRkhNSU4gZnJvbSBgX19SSVNDVl9JU0FfRVhUX0RBVEFg IHRvCiAgICAgYF9fUklTQ1ZfSVNBX0VYVF9EQVRBX1ZBTElEQVRFYAogICAtIEFkZHMgYHJpc2N2 X2V4dF9mX2RlcGVuZHNgIHZhbGlkYXRpb24gY2FsbGJhY2sgKGxpbmVzIDgzLTkwKSB3aGljaAog ICAgIGNoZWNrcyB0aGF0IHRoZSBGIGV4dGVuc2lvbiBpcyBhdmFpbGFibGUgYmVmb3JlIGFsbG93 aW5nIHRoZXNlCiAgICAgZXh0ZW5zaW9ucyB0byBiZSByZXBvcnRlZAogICAtIFRoZSB2YWxpZGF0 aW9uIGZ1bmN0aW9uIHJldHVybnMgYC1FUFJPQkVfREVGRVJgIGlmIEYgaXMgbm90CiAgICAgcHJl c2VudCwgcHJldmVudGluZyBpbmNvcnJlY3QgZmVhdHVyZSByZXBvcnRpbmcKCjIuICoqSW4gYXJj aC9yaXNjdi9rZXJuZWwvc3lzX2h3cHJvYmUuYyAobGluZXMgMTU2LTE2MykqKjoKICAgLSBSZW1v dmVzIHRoZSBgaGFzX2ZwdSgpYCBjb25kaXRpb25hbCBjaGVjayB0aGF0IHdhcyBwcmV2aW91c2x5 CiAgICAgZ2F0aW5nIHRoZXNlIGV4dGVuc2lvbnMKICAgLSBUaGlzIGlzIHNhZmUgYmVjYXVzZSB0 aGUgdmFsaWRhdGlvbiBpcyBub3cgcHJvcGVybHkgaGFuZGxlZCBpbgogICAgIGNwdWZlYXR1cmUu YyB0aHJvdWdoIHRoZSB2YWxpZGF0aW9uIGNhbGxiYWNrcwoKIyMjIFdoeSBUaGlzIGlzIGEgQnVn IEZpeAoKQWNjb3JkaW5nIHRvIHRoZSBSSVNDLVYgSVNBIHNwZWNpZmljYXRpb246Ci0gKipaRkEq KiAoQWRkaXRpb25hbCBGbG9hdGluZy1Qb2ludCBJbnN0cnVjdGlvbnMpIHJlcXVpcmVzIEYKLSAq KlpGSCoqIChIYWxmLVByZWNpc2lvbiBGbG9hdGluZy1Qb2ludCkgcmVxdWlyZXMgRgotICoqWkZI TUlOKiogKE1pbmltYWwgSGFsZi1QcmVjaXNpb24gRmxvYXRpbmctUG9pbnQpIHJlcXVpcmVzIEYK CldpdGhvdXQgdGhpcyBmaXgsIHRoZSBrZXJuZWwgY291bGQgaW5jb3JyZWN0bHkgcmVwb3J0IHRo ZXNlIGV4dGVuc2lvbnMKYXMgYXZhaWxhYmxlIGV2ZW4gd2hlbiB0aGUgYmFzZSBGIGV4dGVuc2lv biBpcyBub3QgcHJlc2VudC4gVGhpcwp2aW9sYXRlcyB0aGUgSVNBIHNwZWNpZmljYXRpb24gYW5k IGNvdWxkIGxlYWQgdG86CgoxLiAqKkluY29ycmVjdCB1c2Vyc3BhY2UgYmVoYXZpb3IqKjogQXBw bGljYXRpb25zIHVzaW5nIGh3cHJvYmUoKSBtaWdodAogICBkZXRlY3QgdGhlc2UgZXh0ZW5zaW9u cyBhbmQgYXR0ZW1wdCB0byB1c2UgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlbid0CiAgIHN1cHBvcnRl ZAoyLiAqKklsbGVnYWwgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9ucyoqOiBJZiB1c2Vyc3BhY2UgdHJp ZXMgdG8gZXhlY3V0ZQogICB0aGVzZSBpbnN0cnVjdGlvbnMgd2l0aG91dCBGIHN1cHBvcnQKMy4g KipJbmNvbnNpc3RlbnQgQ1BVIGNhcGFiaWxpdHkgcmVwb3J0aW5nKio6IFRoZSBrZXJuZWwgd291 bGQgcmVwb3J0CiAgIGNhcGFiaWxpdGllcyB0aGF0IHRoZSBoYXJkd2FyZSBkb2Vzbid0IGFjdHVh bGx5IHN1cHBvcnQKCiMjIyBDb250ZXh0IGZyb20gUmVsYXRlZCBDb21taXRzCgpUaGlzIGNvbW1p dCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIHZhbGlkYXRpb24gZWZmb3J0OgotICoqZTE4NmMyOGRkYTEx ZSoqIChGZWIgMjAyNSk6IEludHJvZHVjZWQgYHJpc2N2X2V4dF9mX2RlcGVuZHNgCiAgdmFsaWRh dGlvbiBmb3IgWkZCRk1JTgotICoqMTJlN2ZiYjZhODRlNioqIChNYXIgMjAyNSk6IEFkZGVkIEYg JiBEIGV4dGVuc2lvbiB2YWxpZGF0aW9uIGNoZWNrcwotICoqMDA0OTYxODQzMzg5ZSoqIChBcHIg MjAyNSk6IE1lcmdlZCB0aGUgdmFsaWRhdGlvbiBzZXJpZXMKLSAqKjJlMmNmNTU4MWZjY2MqKiAo TWF5IDIwMjUpOiBUaGlzIGNvbW1pdCAtIGNvbXBsZXRlcyB0aGUgdmFsaWRhdGlvbgogIGJ5IGFk ZGluZyBpdCBmb3IgWkZBL1pGSC9aRkhNSU4gd2hpY2ggd2VyZSBtaXNzZWQKClRoZSBjb21taXQg bWVzc2FnZSBzdGF0ZXM6ICJOb3cgdGhhdCBleHRlbnNpb25zIGFyZSBjb3JyZWN0bHkgcmVwb3J0 ZWQKdXNpbmcgdGhlIEYvRCBwcmVzZW5jZSwgd2UgY2FuIHJlbW92ZSB0aGUgaGFzX2ZwdSgpIGNo ZWNrIiAtIGluZGljYXRpbmcKdGhpcyBpcyBjbGVhbnVwIHRoYXQgZm9sbG93cyB0aGUgcHJvcGVy IHZhbGlkYXRpb24gaW5mcmFzdHJ1Y3R1cmUgYmVpbmcKcHV0IGluIHBsYWNlLgoKIyMjIEJhY2tw b3J0aW5nIENyaXRlcmlhIEFzc2Vzc21lbnQKCuKchSAqKkZpeGVzIGEgYnVnIGFmZmVjdGluZyB1 c2VycyoqOiBZZXMgLSBpbmNvcnJlY3QgQ1BVIGZlYXR1cmUgcmVwb3J0aW5nCmNhbiBjYXVzZSB1 c2Vyc3BhY2UgYXBwbGljYXRpb25zIHRvIG1hbGZ1bmN0aW9uCgrinIUgKipTbWFsbCBhbmQgY29u dGFpbmVkKio6IFllcyAtIG9ubHkgMTQgbGluZXMgY2hhbmdlZCBhY3Jvc3MgMiBmaWxlcywKZm9s bG93aW5nIGFuIGVzdGFibGlzaGVkIHBhdHRlcm4KCuKchSAqKkNsZWFyIHNpZGUgZWZmZWN0cyoq OiBObyB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyAtIG1ha2VzIHJlcG9ydGluZwptb3JlIGNvcnJl Y3QKCuKchSAqKk5vIGFyY2hpdGVjdHVyYWwgY2hhbmdlcyoqOiBObyAtIHVzZXMgZXhpc3Rpbmcg dmFsaWRhdGlvbgppbmZyYXN0cnVjdHVyZQoK4pyFICoqTWluaW1hbCByZWdyZXNzaW9uIHJpc2sq KjogVmVyeSBsb3cgLSB0aGUgY2hhbmdlIG1ha2VzIGZlYXR1cmUKcmVwb3J0aW5nIG1vcmUgY29u c2VydmF0aXZlICh3b24ndCByZXBvcnQgZmVhdHVyZXMgdW5sZXNzIGRlcGVuZGVuY2llcwphcmUg bWV0KQoK4pyFICoqQ29uZmluZWQgdG8gc3Vic3lzdGVtKio6IFllcyAtIG9ubHkgYWZmZWN0cyBS SVNDLVYgYXJjaGl0ZWN0dXJlIGNvZGUKCiMjIyBDb25jbHVzaW9uCgpUaGlzIGNvbW1pdCBzaG91 bGQgYmUgYmFja3BvcnRlZCBiZWNhdXNlIGl0OgoxLiBGaXhlcyBpbmNvcnJlY3QgQ1BVIGNhcGFi aWxpdHkgcmVwb3J0aW5nIHRoYXQgdmlvbGF0ZXMgdGhlIFJJU0MtViBJU0EKICAgc3BlY2lmaWNh dGlvbgoyLiBQcmV2ZW50cyBwb3RlbnRpYWwgaWxsZWdhbCBpbnN0cnVjdGlvbiBleGNlcHRpb25z IGluIHVzZXJzcGFjZQozLiBJcyBzbWFsbCwgZm9jdXNlZCwgYW5kIGxvdy1yaXNrCjQuIEZvbGxv d3MgdGhlIHN0YWJsZSB0cmVlIHJ1bGVzIGZvciBpbXBvcnRhbnQgYnVnIGZpeGVzIHdpdGggbWlu aW1hbAogICByaXNrCjUuIENvbXBsZXRlcyBhIHZhbGlkYXRpb24gc2VyaWVzIHRoYXQgd2FzIGFs cmVhZHkgbWVyZ2VkIHVwc3RyZWFtCgpUaGUgZml4IGVuc3VyZXMgUklTQy1WIHN5c3RlbXMgY29y cmVjdGx5IHJlcG9ydCB0aGVpciBjYXBhYmlsaXRpZXMgdG8KdXNlcnNwYWNlLCB3aGljaCBpcyBj cml0aWNhbCBmb3IgcHJvcGVyIHN5c3RlbSBvcGVyYXRpb24uCgogYXJjaC9yaXNjdi9rZXJuZWwv Y3B1ZmVhdHVyZS5jICB8ICA2ICsrKy0tLQogYXJjaC9yaXNjdi9rZXJuZWwvc3lzX2h3cHJvYmUu YyB8IDE0ICsrKysrKy0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwg MTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVy ZS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jCmluZGV4IDc0M2Q1MzQxNTU3MmUu LjY3YjU5Njk5MzU3ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUu YworKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMKQEAgLTQ3NCwxMCArNDc0LDEw IEBAIGNvbnN0IHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgcmlzY3ZfaXNhX2V4dFtdID0gewog CV9fUklTQ1ZfSVNBX0VYVF9EQVRBKHphY2FzLCBSSVNDVl9JU0FfRVhUX1pBQ0FTKSwKIAlfX1JJ U0NWX0lTQV9FWFRfREFUQSh6YWxyc2MsIFJJU0NWX0lTQV9FWFRfWkFMUlNDKSwKIAlfX1JJU0NW X0lTQV9FWFRfREFUQSh6YXdycywgUklTQ1ZfSVNBX0VYVF9aQVdSUyksCi0JX19SSVNDVl9JU0Ff RVhUX0RBVEEoemZhLCBSSVNDVl9JU0FfRVhUX1pGQSksCisJX19SSVNDVl9JU0FfRVhUX0RBVEFf VkFMSURBVEUoemZhLCBSSVNDVl9JU0FfRVhUX1pGQSwgcmlzY3ZfZXh0X2ZfZGVwZW5kcyksCiAJ X19SSVNDVl9JU0FfRVhUX0RBVEFfVkFMSURBVEUoemZiZm1pbiwgUklTQ1ZfSVNBX0VYVF9aRkJG TUlOLCByaXNjdl9leHRfZl9kZXBlbmRzKSwKLQlfX1JJU0NWX0lTQV9FWFRfREFUQSh6ZmgsIFJJ U0NWX0lTQV9FWFRfWkZIKSwKLQlfX1JJU0NWX0lTQV9FWFRfREFUQSh6ZmhtaW4sIFJJU0NWX0lT QV9FWFRfWkZITUlOKSwKKwlfX1JJU0NWX0lTQV9FWFRfREFUQV9WQUxJREFURSh6ZmgsIFJJU0NW X0lTQV9FWFRfWkZILCByaXNjdl9leHRfZl9kZXBlbmRzKSwKKwlfX1JJU0NWX0lTQV9FWFRfREFU QV9WQUxJREFURSh6ZmhtaW4sIFJJU0NWX0lTQV9FWFRfWkZITUlOLCByaXNjdl9leHRfZl9kZXBl bmRzKSwKIAlfX1JJU0NWX0lTQV9FWFRfREFUQSh6Y2EsIFJJU0NWX0lTQV9FWFRfWkNBKSwKIAlf X1JJU0NWX0lTQV9FWFRfREFUQV9WQUxJREFURSh6Y2IsIFJJU0NWX0lTQV9FWFRfWkNCLCByaXNj dl9leHRfemNhX2RlcGVuZHMpLAogCV9fUklTQ1ZfSVNBX0VYVF9EQVRBX1ZBTElEQVRFKHpjZCwg UklTQ1ZfSVNBX0VYVF9aQ0QsIHJpc2N2X2V4dF96Y2RfdmFsaWRhdGUpLApkaWZmIC0tZ2l0IGEv YXJjaC9yaXNjdi9rZXJuZWwvc3lzX2h3cHJvYmUuYyBiL2FyY2gvcmlzY3Yva2VybmVsL3N5c19o d3Byb2JlLmMKaW5kZXggMGIxNzBlMThhMmJlYi4uM2U5MjU5NzkwODE2ZSAxMDA2NDQKLS0tIGEv YXJjaC9yaXNjdi9rZXJuZWwvc3lzX2h3cHJvYmUuYworKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9z eXNfaHdwcm9iZS5jCkBAIC0xNTMsMTQgKzE1MywxMiBAQCBzdGF0aWMgdm9pZCBod3Byb2JlX2lz YV9leHQwKHN0cnVjdCByaXNjdl9od3Byb2JlICpwYWlyLAogCQkJRVhUX0tFWShaVktUKTsKIAkJ fQogCi0JCWlmIChoYXNfZnB1KCkpIHsKLQkJCUVYVF9LRVkoWkNEKTsKLQkJCUVYVF9LRVkoWkNG KTsKLQkJCUVYVF9LRVkoWkZBKTsKLQkJCUVYVF9LRVkoWkZCRk1JTik7Ci0JCQlFWFRfS0VZKFpG SCk7Ci0JCQlFWFRfS0VZKFpGSE1JTik7Ci0JCX0KKwkJRVhUX0tFWShaQ0QpOworCQlFWFRfS0VZ KFpDRik7CisJCUVYVF9LRVkoWkZBKTsKKwkJRVhUX0tFWShaRkJGTUlOKTsKKwkJRVhUX0tFWSha RkgpOworCQlFWFRfS0VZKFpGSE1JTik7CiAKIAkJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JJU0NW X0lTQV9TVVBNKSkKIAkJCUVYVF9LRVkoU1VQTSk7Ci0tIAoyLjUxLjAKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxp c3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==