mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
{x86,um}/uapi/ptrace: Guard register offset macros with __ASSEMBLER__ or __FRAME_OFFSETS
The register offset macros in <asm/ptrace-abi.h> are guarded by `defined(__ASSEMBLER__) || defined(__FRAME_OFFSETS)` for 64-bit, but were left unguarded for 32-bit. This causes havoc for userspace that happens to use identifiers colliding with these short macro names (e.g., EBX, ECX, EAX, DS, ES, FS, GS, CS, SS). Without this guard, userspace is forced to be super extra careful with include ordering to minimize the chance of collision. Wrap both the 32-bit and 64-bit register definitions under `#if defined(__ASSEMBLER__) || defined(__FRAME_OFFSETS)`, and ensure User-Mode Linux (UML) defines `__FRAME_OFFSETS` for 32-bit as well. Closes: https://github.com/llvm/llvm-project/issues/217413 Assisted-by: LLM Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Acked-by: Oleg Nesterov <oleg@redhat.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Tested-by: Elliott Hughes <enh@google.com> Link: https://patch.msgid.link/20260821-ptrace_uapi-v1-1-3de8638a29f2@google.com
This commit is contained in:
parent
e3ee38c1bc
commit
a661c34fe6
|
|
@ -2,6 +2,7 @@
|
|||
#ifndef _ASM_X86_PTRACE_ABI_H
|
||||
#define _ASM_X86_PTRACE_ABI_H
|
||||
|
||||
#if defined(__ASSEMBLER__) || defined(__FRAME_OFFSETS)
|
||||
#ifdef __i386__
|
||||
|
||||
#define EBX 0
|
||||
|
|
@ -25,7 +26,6 @@
|
|||
|
||||
#else /* __i386__ */
|
||||
|
||||
#if defined(__ASSEMBLER__) || defined(__FRAME_OFFSETS)
|
||||
/*
|
||||
* C ABI says these regs are callee-preserved. They aren't saved on kernel entry
|
||||
* unless syscall needs a complete, fully filled "struct pt_regs".
|
||||
|
|
@ -57,12 +57,12 @@
|
|||
#define EFLAGS 144
|
||||
#define RSP 152
|
||||
#define SS 160
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
/* top of stack page */
|
||||
#define FRAME_SIZE 168
|
||||
|
||||
#endif /* !__i386__ */
|
||||
#endif /* defined(__ASSEMBLER__) || defined(__FRAME_OFFSETS) */
|
||||
|
||||
/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
|
||||
#define PTRACE_GETREGS 12
|
||||
|
|
|
|||
|
|
@ -13,9 +13,7 @@ enum {
|
|||
};
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#ifndef CONFIG_X86_32
|
||||
#define __FRAME_OFFSETS /* Needed to get the R* macros */
|
||||
#endif
|
||||
#define __FRAME_OFFSETS /* Needed to get the register macros */
|
||||
#include <asm/ptrace-generic.h>
|
||||
|
||||
#define user_mode(r) UPT_IS_USER(&(r)->regs)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/regset.h>
|
||||
#define __FRAME_OFFSETS
|
||||
#include <asm/ptrace-abi.h>
|
||||
#include <registers.h>
|
||||
#include <skas.h>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user