mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
There have been some recently reported ORC unwinder warnings like:
WARNING: can't access registers at entry_SYSCALL_64_after_hwframe+0x63/0xcd
WARNING: stack going in the wrong direction? at __sys_setsockopt+0x2c6/0x5b0 net/socket.c:2271
And a KASAN warning:
BUG: KASAN: stack-out-of-bounds in unwind_next_frame (arch/x86/include/asm/ptrace.h:136 arch/x86/kernel/unwind_orc.c:455)
It turns out the 'signal' bit isn't getting propagated from the unwind
hints to the ORC entries, making the unwinder confused at times.
Fixes: ffb1b4a410 ("x86/unwind/orc: Add 'signal' field to ORC metadata")
Reported-by: kernel test robot <oliver.sang@intel.com>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/97eef9db60cd86d376a9a40d49d77bb67a8f6526.1676579666.git.jpoimboe@kernel.org
42 lines
773 B
C
42 lines
773 B
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Copyright (C) 2015-2017 Josh Poimboeuf <jpoimboe@redhat.com>
|
|
*/
|
|
|
|
#ifndef _OBJTOOL_CFI_H
|
|
#define _OBJTOOL_CFI_H
|
|
|
|
#include <arch/cfi_regs.h>
|
|
#include <linux/list.h>
|
|
|
|
#define CFI_UNDEFINED -1
|
|
#define CFI_CFA -2
|
|
#define CFI_SP_INDIRECT -3
|
|
#define CFI_BP_INDIRECT -4
|
|
|
|
struct cfi_reg {
|
|
int base;
|
|
int offset;
|
|
};
|
|
|
|
struct cfi_init_state {
|
|
struct cfi_reg regs[CFI_NUM_REGS];
|
|
struct cfi_reg cfa;
|
|
};
|
|
|
|
struct cfi_state {
|
|
struct hlist_node hash; /* must be first, cficmp() */
|
|
struct cfi_reg regs[CFI_NUM_REGS];
|
|
struct cfi_reg vals[CFI_NUM_REGS];
|
|
struct cfi_reg cfa;
|
|
int stack_size;
|
|
int drap_reg, drap_offset;
|
|
unsigned char type;
|
|
bool bp_scratch;
|
|
bool drap;
|
|
bool signal;
|
|
bool end;
|
|
};
|
|
|
|
#endif /* _OBJTOOL_CFI_H */
|