]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blobdiff - queue-5.10/s390-vdso-add-cfi-for-ra-register-to-asm-macro-vdso_.patch
Fixes for 5.10
[thirdparty/kernel/stable-queue.git] / queue-5.10 / s390-vdso-add-cfi-for-ra-register-to-asm-macro-vdso_.patch
diff --git a/queue-5.10/s390-vdso-add-cfi-for-ra-register-to-asm-macro-vdso_.patch b/queue-5.10/s390-vdso-add-cfi-for-ra-register-to-asm-macro-vdso_.patch
new file mode 100644 (file)
index 0000000..a3e8489
--- /dev/null
@@ -0,0 +1,56 @@
+From 849655f898735334e1af4cc90c3522a555f0ff73 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 23 Apr 2024 17:35:52 +0200
+Subject: s390/vdso: Add CFI for RA register to asm macro vdso_func
+
+From: Jens Remus <jremus@linux.ibm.com>
+
+[ Upstream commit b961ec10b9f9719987470236feb50c967db5a652 ]
+
+The return-address (RA) register r14 is specified as volatile in the
+s390x ELF ABI [1]. Nevertheless proper CFI directives must be provided
+for an unwinder to restore the return address, if the RA register
+value is changed from its value at function entry, as it is the case.
+
+[1]: s390x ELF ABI, https://github.com/IBM/s390x-abi/releases
+
+Fixes: 4bff8cb54502 ("s390: convert to GENERIC_VDSO")
+Signed-off-by: Jens Remus <jremus@linux.ibm.com>
+Acked-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/s390/include/asm/dwarf.h               | 1 +
+ arch/s390/kernel/vdso64/vdso_user_wrapper.S | 2 ++
+ 2 files changed, 3 insertions(+)
+
+diff --git a/arch/s390/include/asm/dwarf.h b/arch/s390/include/asm/dwarf.h
+index 4f21ae561e4dd..390906b8e386e 100644
+--- a/arch/s390/include/asm/dwarf.h
++++ b/arch/s390/include/asm/dwarf.h
+@@ -9,6 +9,7 @@
+ #define CFI_DEF_CFA_OFFSET    .cfi_def_cfa_offset
+ #define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset
+ #define CFI_RESTORE           .cfi_restore
++#define CFI_REL_OFFSET                .cfi_rel_offset
+ #ifdef CONFIG_AS_CFI_VAL_OFFSET
+ #define CFI_VAL_OFFSET                .cfi_val_offset
+diff --git a/arch/s390/kernel/vdso64/vdso_user_wrapper.S b/arch/s390/kernel/vdso64/vdso_user_wrapper.S
+index a775d7e528728..2183b8f64d574 100644
+--- a/arch/s390/kernel/vdso64/vdso_user_wrapper.S
++++ b/arch/s390/kernel/vdso64/vdso_user_wrapper.S
+@@ -23,8 +23,10 @@ __kernel_\func:
+       CFI_DEF_CFA_OFFSET (STACK_FRAME_OVERHEAD + WRAPPER_FRAME_SIZE)
+       CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
+       stg     %r14,STACK_FRAME_OVERHEAD(%r15)
++      CFI_REL_OFFSET 14, STACK_FRAME_OVERHEAD
+       brasl   %r14,__s390_vdso_\func
+       lg      %r14,STACK_FRAME_OVERHEAD(%r15)
++      CFI_RESTORE 14
+       aghi    %r15,WRAPPER_FRAME_SIZE
+       CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
+       CFI_RESTORE 15
+-- 
+2.43.0
+