Patch "riscv: uprobes: Restore thread.bad_cause" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    riscv: uprobes: Restore thread.bad_cause

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     riscv-uprobes-restore-thread.bad_cause.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 0fa7955c8bc2ab061a72ff6c9b1f6757c3d7fac9
Author: Tiezhu Yang <yangtiezhu@xxxxxxxxxxx>
Date:   Sun Apr 23 09:42:26 2023 +0800

    riscv: uprobes: Restore thread.bad_cause
    
    [ Upstream commit 58b1294dd1d65bb62f08dddbf418f954210c2057 ]
    
    thread.bad_cause is saved in arch_uprobe_pre_xol(), it should be restored
    in arch_uprobe_{post,abort}_xol() accordingly, otherwise the save operation
    is meaningless, this change is similar with x86 and powerpc.
    
    Signed-off-by: Tiezhu Yang <yangtiezhu@xxxxxxxxxxx>
    Acked-by: Oleg Nesterov <oleg@xxxxxxxxxx>
    Reviewed-by: Guo Ren <guoren@xxxxxxxxxx>
    Fixes: 74784081aac8 ("riscv: Add uprobes supported")
    Link: https://lore.kernel.org/r/1682214146-3756-1-git-send-email-yangtiezhu@xxxxxxxxxxx
    Signed-off-by: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/riscv/kernel/probes/uprobes.c b/arch/riscv/kernel/probes/uprobes.c
index c976a21cd4bd5..194f166b2cc40 100644
--- a/arch/riscv/kernel/probes/uprobes.c
+++ b/arch/riscv/kernel/probes/uprobes.c
@@ -67,6 +67,7 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
 	struct uprobe_task *utask = current->utask;
 
 	WARN_ON_ONCE(current->thread.bad_cause != UPROBE_TRAP_NR);
+	current->thread.bad_cause = utask->autask.saved_cause;
 
 	instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size);
 
@@ -102,6 +103,7 @@ void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
 {
 	struct uprobe_task *utask = current->utask;
 
+	current->thread.bad_cause = utask->autask.saved_cause;
 	/*
 	 * Task has received a fatal signal, so reset back to probbed
 	 * address.



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux