diff --git a/boost-1.83-context-arm64-bti-hint.patch b/boost-1.83-context-arm64-bti-hint.patch new file mode 100644 index 0000000..cb78455 --- /dev/null +++ b/boost-1.83-context-arm64-bti-hint.patch @@ -0,0 +1,117 @@ +commit 1be6822473b78278af1779fc6f642128996473d8 +Author: Zayd Rajab +Date: Fri Aug 15 22:13:10 2025 +0000 + + [AArch64][BTI] Add BTI hint + GNU property to fcontext trampolines (ELF/GAS) + + The AArch64 fcontext trampolines (jump_fcontext, make_fcontext, ontop_fcontext) + are indirect-entry-points. On BTI-enforcing systems they must begin with a BTI + or the first resume can trap with SIGILL. + + Insert `bti c` (hint #34) at each entry under `__ARM_FEATURE_BTI_DEFAULT`, and + emit `GNU_PROPERTY_AARCH64_FEATURE_1_BTI` from each AArch64 assembly file so + linkers map the DSO with PROT_BTI without requiring -z force-bti. + + Scope: ELF/GAS AArch64 trampolines only; +4 bytes per entry + + Fixes #308 + +diff --git a/src/asm/jump_arm64_aapcs_elf_gas.S b/src/asm/jump_arm64_aapcs_elf_gas.S +index 7c1f075..b8abb2e 100644 +--- a/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S ++++ b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S +@@ -53,10 +53,28 @@ + + .file "jump_arm64_aapcs_elf_gas.S" + .text ++#if defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT == 1) ++/* Mark this object as requiring BTI, enabling the linker to set BTI on the output */ ++ .pushsection .note.gnu.property, "a", %note ++ .p2align 3 ++ .long 4 /* namesz */ ++ .long 16 /* descsz (16 bytes) */ ++ .long 5 /* type = NT_GNU_PROPERTY_TYPE_0 */ ++ .asciz "GNU" ++ .p2align 3 ++ .long 0xc0000000 /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ ++ .long 4 /* datasz = 4 */ ++ .long 1 /* GNU_PROPERTY_AARCH64_FEATURE_1_BTI */ ++ .long 0 /* pad to 8-byte alignment */ ++ .popsection ++#endif + .align 2 + .global jump_fcontext + .type jump_fcontext, %function + jump_fcontext: ++#if defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT == 1) ++ hint #34 /* bti c: valid indirect-entry target */ ++#endif + # prepare stack for GP + FPU + sub sp, sp, #0xb0 + +diff --git a/src/asm/make_arm64_aapcs_elf_gas.S b/src/asm/make_arm64_aapcs_elf_gas.S +index 8ac825b..2465254 100644 +--- a/libs/context/src/asm/make_arm64_aapcs_elf_gas.S ++++ b/libs/context/src/asm/make_arm64_aapcs_elf_gas.S +@@ -53,10 +53,28 @@ + + .file "make_arm64_aapcs_elf_gas.S" + .text ++#if defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT == 1) ++/* Mark this object as requiring BTI, enabling the linker to set BTI on the output */ ++ .pushsection .note.gnu.property, "a", %note ++ .p2align 3 ++ .long 4 /* namesz */ ++ .long 16 /* descsz (16 bytes) */ ++ .long 5 /* type = NT_GNU_PROPERTY_TYPE_0 */ ++ .asciz "GNU" ++ .p2align 3 ++ .long 0xc0000000 /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ ++ .long 4 /* datasz = 4 */ ++ .long 1 /* GNU_PROPERTY_AARCH64_FEATURE_1_BTI */ ++ .long 0 /* pad to 8-byte alignment */ ++ .popsection ++#endif + .align 2 + .global make_fcontext + .type make_fcontext, %function + make_fcontext: ++#if defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT == 1) ++ hint #34 /* bti c */ ++#endif + # shift address in x0 (allocated stack) to lower 16 byte boundary + and x0, x0, ~0xF + +diff --git a/src/asm/ontop_arm64_aapcs_elf_gas.S b/src/asm/ontop_arm64_aapcs_elf_gas.S +index 8e40fc7..1e6b466 100644 +--- a/libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S ++++ b/libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S +@@ -53,10 +53,28 @@ + + .file "ontop_arm64_aapcs_elf_gas.S" + .text ++#if defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT == 1) ++/* Mark this object as requiring BTI, enabling the linker to set BTI on the output */ ++ .pushsection .note.gnu.property, "a", %note ++ .p2align 3 ++ .long 4 /* namesz */ ++ .long 16 /* descsz (16 bytes) */ ++ .long 5 /* type = NT_GNU_PROPERTY_TYPE_0 */ ++ .asciz "GNU" ++ .p2align 3 ++ .long 0xc0000000 /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ ++ .long 4 /* datasz = 4 */ ++ .long 1 /* GNU_PROPERTY_AARCH64_FEATURE_1_BTI */ ++ .long 0 /* pad to 8-byte alignment */ ++ .popsection ++#endif + .align 2 + .global ontop_fcontext + .type ontop_fcontext, %function + ontop_fcontext: ++#if defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT == 1) ++ hint #34 /* bti c */ ++#endif + # prepare stack for GP + FPU + sub sp, sp, #0xb0 + diff --git a/boost.spec b/boost.spec index fca9d6e..6daa392 100644 --- a/boost.spec +++ b/boost.spec @@ -46,7 +46,7 @@ Name: boost %global real_name boost Summary: The free peer-reviewed portable C++ source libraries Version: 1.83.0 -Release: 7%{?dist} +Release: 8%{?dist} License: BSL-1.0 AND MIT AND Python-2.0.1 # Replace each . with _ in %%{version} @@ -166,6 +166,9 @@ Patch8: boost-1.83-regex-test-fixes.patch # https://github.com/boostorg/thread/pull/408 Patch9: boost-1.83-fix-no-member-named_that_error.patch +# https://github.com/boostorg/context/pull/312 +Patch10: boost-1.83-context-arm64-bti-hint.patch + %bcond_with tests %bcond_with docs_generated @@ -1295,6 +1298,10 @@ fi %{_mandir}/man1/b2.1* %changelog +* Wed Apr 22 2026 Jonathan Wakely - 1.83.0-8 +- Add patch for arm64 BTI hints in Boost.Context asm + Resolves: RHEL-50164 + * Tue Jan 27 2026 Patrick Palka - 1.83.0-7 - Add boost-url dependency to metapackage Resolves: RHEL-124169