This reverts commit 226263231f8ce9f54a4fec6e0279c8c13e570d3b. We are reverting the patch because we need to revert an underlying patch d21e78475d01 "(ms/sched/x86: Add 'struct inactive_task_frame' to better document the sleeping task stack frame")
and later we'll rework and re-apply "ms/x86/unwind: Disable KASAN checks for non-current tasks" again. https://jira.vzint.dev/browse/PSBM-149932 Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com> --- arch/x86/include/asm/stacktrace.h | 5 +---- arch/x86/kernel/unwind_frame.c | 19 ++----------------- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/arch/x86/include/asm/stacktrace.h b/arch/x86/include/asm/stacktrace.h index 2af5f0bac060..a4fe84fd293c 100644 --- a/arch/x86/include/asm/stacktrace.h +++ b/arch/x86/include/asm/stacktrace.h @@ -53,16 +53,13 @@ static inline bool on_stack(struct stack_info *info, void *addr, size_t len) static inline unsigned long * get_frame_pointer(struct task_struct *task, struct pt_regs *regs) { - struct inactive_task_frame *frame; - if (regs) return (unsigned long *)regs->bp; if (task == current) return __builtin_frame_address(0); - frame = (struct inactive_task_frame *)task->thread.sp; - return (unsigned long *)READ_ONCE_NOCHECK(frame->bp); + return ((struct inactive_task_frame *)task->thread.sp)->bp; } #else static inline unsigned long * diff --git a/arch/x86/kernel/unwind_frame.c b/arch/x86/kernel/unwind_frame.c index 0a7d7d265053..05a9f845c417 100644 --- a/arch/x86/kernel/unwind_frame.c +++ b/arch/x86/kernel/unwind_frame.c @@ -6,21 +6,6 @@ #define FRAME_HEADER_SIZE (sizeof(long) * 2) -/* - * This disables KASAN checking when reading a value from another task's stack, - * since the other task could be running on another CPU and could have poisoned - * the stack in the meantime. - */ -#define READ_ONCE_TASK_STACK(task, x) \ -({ \ - unsigned long val; \ - if (task == current) \ - val = READ_ONCE(x); \ - else \ - val = READ_ONCE_NOCHECK(x); \ - val; \ -}) - unsigned long unwind_get_return_address(struct unwind_state *state) { if (unwind_done(state)) @@ -59,7 +44,7 @@ static bool update_stack_state(struct unwind_state *state, /* Move state to the next frame: */ state->bp = next_bp; addr_p = state->bp + 1; - addr = READ_ONCE_TASK_STACK(state->task, *addr_p); + addr = READ_ONCE(*addr_p); state->ip = ftrace_graph_ret_addr(state->task, &state->graph_idx, addr, addr_p); @@ -128,7 +113,7 @@ bool unwind_next_frame(struct unwind_state *state) if (unwind_end(state)) goto the_end; - next_bp = (unsigned long *)READ_ONCE_TASK_STACK(state->task,*state->bp); + next_bp = (unsigned long *)READ_ONCE(*state->bp); /* make sure the next frame's data is accessible */ if (!update_stack_state(state, next_bp)) { -- 2.24.3 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel