From 2a8e693913fac184013a173ea5d012dff13ba9a5a975632a94d0bb7dcb4097c8 Mon Sep 17 00:00:00 2001 From: Bernhard Wiedemann Date: Sun, 17 Mar 2024 04:35:31 +0000 Subject: [PATCH] Accepting request 1157866 from home:Guillaume_G:branches:Archiving - Backport PAC/BTI fix for aarch64 https://github.com/facebook/zstd/pull/3961 : * zstd-pr-3961.patch OBS-URL: https://build.opensuse.org/request/show/1157866 OBS-URL: https://build.opensuse.org/package/show/Archiving/zstd?expand=0&rev=98 --- zstd-pr-3961.patch | 67 ++++++++++++++++++++++++++++++++++++++++++++++ zstd.changes | 7 +++++ zstd.spec | 4 ++- 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 zstd-pr-3961.patch diff --git a/zstd-pr-3961.patch b/zstd-pr-3961.patch new file mode 100644 index 0000000..66ad758 --- /dev/null +++ b/zstd-pr-3961.patch @@ -0,0 +1,67 @@ +From a88781954a875c4f00883eba6a8c5d172c4f5c17 Mon Sep 17 00:00:00 2001 +From: Nick Terrell +Date: Wed, 13 Mar 2024 09:58:34 -0700 +Subject: [PATCH] [asm][aarch64] Mark that BTI and PAC are supported + +Mark that `huf_decompress_amd64.S` supports BTI and PAC, which it trivially does because it is empty for aarch64. + +The issue only requested BTI markings, but it also makes sense to mark PAC, which is the only other feature. + +Also run add a test for this mode to the ARM64 QEMU test. Before this PR it warns on `huf_decompress_amd64.S`, after it doesn't. + +Fixes Issue #3841. +--- + .github/workflows/dev-short-tests.yml | 1 + + lib/decompress/huf_decompress_amd64.S | 23 ++++++++++++++++++++++- + 2 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/.github/workflows/dev-short-tests.yml b/.github/workflows/dev-short-tests.yml +index b2aaff89cf..5324b38d9a 100644 +--- a/.github/workflows/dev-short-tests.yml ++++ b/.github/workflows/dev-short-tests.yml +@@ -409,6 +409,7 @@ jobs: + - name: ARM64 + if: ${{ matrix.name == 'ARM64' }} + run: | ++ LDFLAGS="-static -z force-bti" MOREFLAGS="-mbranch-protection=standard" CC=$XCC QEMU_SYS=$XEMU make clean check + LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check + - name: PPC + if: ${{ matrix.name == 'PPC' }} +diff --git a/lib/decompress/huf_decompress_amd64.S b/lib/decompress/huf_decompress_amd64.S +index 3b96b44612..78da291ee3 100644 +--- a/lib/decompress/huf_decompress_amd64.S ++++ b/lib/decompress/huf_decompress_amd64.S +@@ -10,11 +10,32 @@ + + #include "../common/portability_macros.h" + ++#if defined(__ELF__) && defined(__GNUC__) + /* Stack marking + * ref: https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart + */ +-#if defined(__ELF__) && defined(__GNUC__) + .section .note.GNU-stack,"",%progbits ++ ++#if defined(__aarch64__) ++/* Mark that this assembly supports BTI & PAC, because it is empty for aarch64. ++ * See: https://github.com/facebook/zstd/issues/3841 ++ * See: https://gcc.godbolt.org/z/sqr5T4ffK ++ * See: https://lore.kernel.org/linux-arm-kernel/20200429211641.9279-8-broonie@kernel.org/ ++ * See: https://reviews.llvm.org/D62609 ++ */ ++.pushsection .note.gnu.property, "a" ++.p2align 3 ++.long 4 /* size of the name - "GNU\0" */ ++.long 0x10 /* size of descriptor */ ++.long 0x5 /* NT_GNU_PROPERTY_TYPE_0 */ ++.asciz "GNU" ++.long 0xc0000000 /* pr_type - GNU_PROPERTY_AARCH64_FEATURE_1_AND */ ++.long 4 /* pr_datasz - 4 bytes */ ++.long 3 /* pr_data - GNU_PROPERTY_AARCH64_FEATURE_1_BTI | GNU_PROPERTY_AARCH64_FEATURE_1_PAC */ ++.p2align 3 /* pr_padding - bring everything to 8 byte alignment */ ++.popsection ++#endif ++ + #endif + + #if ZSTD_ENABLE_ASM_X86_64_BMI2 diff --git a/zstd.changes b/zstd.changes index b605a79..b3d2fd4 100644 --- a/zstd.changes +++ b/zstd.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Thu Mar 14 07:13:30 UTC 2024 - Guillaume GARDET + +- Backport PAC/BTI fix for aarch64 + https://github.com/facebook/zstd/pull/3961 : + * zstd-pr-3961.patch + ------------------------------------------------------------------- Fri Dec 29 13:21:02 UTC 2023 - ecsos diff --git a/zstd.spec b/zstd.spec index 475b63e..0f28fab 100644 --- a/zstd.spec +++ b/zstd.spec @@ -1,7 +1,7 @@ # # spec file for package zstd # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -34,6 +34,8 @@ Source1: https://github.com/facebook/zstd/releases/download/v%{version}/% Source2: zstd.keyring Source99: baselibs.conf Patch1: pzstd.1.patch +# PATCH-FIX-UPSTREAM - https://github.com/facebook/zstd/pull/3961 +Patch2: zstd-pr-3961.patch BuildRequires: gcc # C++ is needed for pzstd only BuildRequires: gcc-c++