]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Jul 2025 10:27:36 +0000 (12:27 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Jul 2025 10:27:36 +0000 (12:27 +0200)
added patches:
riscv-uaccess-only-restore-the-csr_status-sum-bit.patch

queue-6.15/riscv-uaccess-only-restore-the-csr_status-sum-bit.patch [new file with mode: 0644]
queue-6.15/series

diff --git a/queue-6.15/riscv-uaccess-only-restore-the-csr_status-sum-bit.patch b/queue-6.15/riscv-uaccess-only-restore-the-csr_status-sum-bit.patch
new file mode 100644 (file)
index 0000000..40c82bb
--- /dev/null
@@ -0,0 +1,82 @@
+From 265d6aba165c500389c80d394ac247460c443ef5 Mon Sep 17 00:00:00 2001
+From: Cyril Bur <cyrilbur@tenstorrent.com>
+Date: Mon, 2 Jun 2025 12:15:43 +0000
+Subject: riscv: uaccess: Only restore the CSR_STATUS SUM bit
+
+From: Cyril Bur <cyrilbur@tenstorrent.com>
+
+commit 265d6aba165c500389c80d394ac247460c443ef5 upstream.
+
+During switch to csrs will OR the value of the register into the
+corresponding csr. In this case we're only interested in restoring the
+SUM bit not the entire register.
+
+Signed-off-by: Cyril Bur <cyrilbur@tenstorrent.com>
+Link: https://lore.kernel.org/r/20250522160954.429333-1-cyrilbur@tenstorrent.com
+Co-developed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
+Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
+Fixes: 788aa64c01f1 ("riscv: save the SR_SUM status over switches")
+Link: https://lore.kernel.org/r/20250602121543.1544278-1-alexghiti@rivosinc.com
+Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/riscv/include/asm/processor.h |    2 +-
+ arch/riscv/kernel/asm-offsets.c    |    6 +++---
+ arch/riscv/kernel/entry.S          |    9 +++++----
+ 3 files changed, 9 insertions(+), 8 deletions(-)
+
+--- a/arch/riscv/include/asm/processor.h
++++ b/arch/riscv/include/asm/processor.h
+@@ -103,7 +103,7 @@ struct thread_struct {
+       struct __riscv_d_ext_state fstate;
+       unsigned long bad_cause;
+       unsigned long envcfg;
+-      unsigned long status;
++      unsigned long sum;
+       u32 riscv_v_flags;
+       u32 vstate_ctrl;
+       struct __riscv_v_ext_state vstate;
+--- a/arch/riscv/kernel/asm-offsets.c
++++ b/arch/riscv/kernel/asm-offsets.c
+@@ -34,7 +34,7 @@ void asm_offsets(void)
+       OFFSET(TASK_THREAD_S9, task_struct, thread.s[9]);
+       OFFSET(TASK_THREAD_S10, task_struct, thread.s[10]);
+       OFFSET(TASK_THREAD_S11, task_struct, thread.s[11]);
+-      OFFSET(TASK_THREAD_STATUS, task_struct, thread.status);
++      OFFSET(TASK_THREAD_SUM, task_struct, thread.sum);
+       OFFSET(TASK_TI_CPU, task_struct, thread_info.cpu);
+       OFFSET(TASK_TI_PREEMPT_COUNT, task_struct, thread_info.preempt_count);
+@@ -347,8 +347,8 @@ void asm_offsets(void)
+                 offsetof(struct task_struct, thread.s[11])
+               - offsetof(struct task_struct, thread.ra)
+       );
+-      DEFINE(TASK_THREAD_STATUS_RA,
+-                offsetof(struct task_struct, thread.status)
++      DEFINE(TASK_THREAD_SUM_RA,
++                offsetof(struct task_struct, thread.sum)
+               - offsetof(struct task_struct, thread.ra)
+       );
+--- a/arch/riscv/kernel/entry.S
++++ b/arch/riscv/kernel/entry.S
+@@ -399,14 +399,15 @@ SYM_FUNC_START(__switch_to)
+       REG_S s11, TASK_THREAD_S11_RA(a3)
+       /* save the user space access flag */
+-      li    s0, SR_SUM
+-      csrr  s1, CSR_STATUS
+-      REG_S s1, TASK_THREAD_STATUS_RA(a3)
++      csrr  s0, CSR_STATUS
++      REG_S s0, TASK_THREAD_SUM_RA(a3)
+       /* Save the kernel shadow call stack pointer */
+       scs_save_current
+       /* Restore context from next->thread */
+-      REG_L s0,  TASK_THREAD_STATUS_RA(a4)
++      REG_L s0,  TASK_THREAD_SUM_RA(a4)
++      li    s1,  SR_SUM
++      and   s0,  s0, s1
+       csrs  CSR_STATUS, s0
+       REG_L ra,  TASK_THREAD_RA_RA(a4)
+       REG_L sp,  TASK_THREAD_SP_RA(a4)
index 935a7402a6b073715c07f8bb0ab061cbe54ebb44..1144789949a19e2885ad4978670b1e8a66a6a6b1 100644 (file)
@@ -260,3 +260,4 @@ x86-pkeys-simplify-pkru-update-in-signal-frame.patch
 s390-ptrace-fix-pointer-dereferencing-in-regs_get_kernel_stack_nth.patch
 io_uring-kbuf-flag-partial-buffer-mappings.patch
 io_uring-gate-req_f_isreg-on-s_anon_inode-as-well.patch
+riscv-uaccess-only-restore-the-csr_status-sum-bit.patch