Commit 2dec723f authored by Xiongfeng Wang's avatar Xiongfeng Wang Committed by Chen Jun
Browse files

arm64: rename functions that reference compat term

maillist inclusion
category: feature
bugzilla: 46790
CVE: NA

Reference: https://github.com/norov/linux/commits/ilp32-5.2



--------------------------------

The ILP32 for ARM64 patch series introduces another 'compat' mode additionally
to aarch32_el0. So to avoid confusing, aarch32-only functions renamed in
according to it.

Signed-off-by: default avatarYury Norov <ynorov@caviumnetworks.com>
Signed-off-by: default avatarYury Norov <ynorov@marvell.com>

 Conflicts:
	arch/arm64/include/asm/ptrace.h
	arch/arm64/include/asm/signal32.h
	arch/arm64/kernel/cpufeature.c
	arch/arm64/kernel/process.c
	arch/arm64/kernel/signal32.c

Signed-off-by: default avatarXiongfeng Wang <wangxiongfeng2@huawei.com>
Acked-by: default avatarXie XiuQi <xiexiuqi@huawei.com>
Signed-off-by: default avatarChen Jun <chenjun102@huawei.com>
parent b18d5a92
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -214,16 +214,16 @@ static inline void forget_syscall(struct pt_regs *regs)
#define arch_has_single_step()	(1)

#ifdef CONFIG_AARCH32_EL0
#define compat_thumb_mode(regs) \
#define a32_thumb_mode(regs) \
	(((regs)->pstate & PSR_AA32_T_BIT))
#else
#define compat_thumb_mode(regs) (0)
#define a32_thumb_mode(regs) (0)
#endif

#define user_mode(regs)	\
	(((regs)->pstate & PSR_MODE_MASK) == PSR_MODE_EL0t)

#define compat_user_mode(regs)	\
#define a32_user_mode(regs)	\
	(((regs)->pstate & (PSR_MODE32_BIT | PSR_MODE_MASK)) == \
	 (PSR_MODE32_BIT | PSR_MODE_EL0t))

@@ -243,7 +243,7 @@ static inline void forget_syscall(struct pt_regs *regs)

static inline unsigned long user_stack_pointer(struct pt_regs *regs)
{
	if (compat_user_mode(regs))
	if (a32_user_mode(regs))
		return regs->compat_sp;
	return regs->sp;
}
+14 −13
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@
#ifdef CONFIG_AARCH32_EL0
#include <linux/compat.h>

struct compat_sigcontext {
struct a32_sigcontext {
	/* We always set these two fields to 0 */
	compat_ulong_t			trap_no;
	compat_ulong_t			error_code;
@@ -34,47 +34,48 @@ struct compat_sigcontext {
	compat_ulong_t			fault_address;
};

struct compat_ucontext {
struct a32_ucontext {
	compat_ulong_t			uc_flags;
	compat_uptr_t			uc_link;
	compat_stack_t			uc_stack;
	struct compat_sigcontext	uc_mcontext;
	struct a32_sigcontext	uc_mcontext;
	compat_sigset_t			uc_sigmask;
	int 				__unused[32 - (sizeof(compat_sigset_t) / sizeof(int))];
	compat_ulong_t			uc_regspace[128] __attribute__((__aligned__(8)));
};

struct compat_sigframe {
	struct compat_ucontext	uc;
struct a32_sigframe {
	struct a32_ucontext	uc;
	compat_ulong_t		retcode[2];
};

struct compat_rt_sigframe {
struct a32_rt_sigframe {
	struct compat_siginfo info;
	struct compat_sigframe sig;
	struct a32_sigframe sig;
};

int compat_setup_frame(int usig, struct ksignal *ksig, sigset_t *set,
int a32_setup_frame(int usig, struct ksignal *ksig, sigset_t *set,
		       struct pt_regs *regs);
int compat_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,

int a32_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
			  struct pt_regs *regs);

void compat_setup_restart_syscall(struct pt_regs *regs);
void a32_setup_restart_syscall(struct pt_regs *regs);
#else

static inline int compat_setup_frame(int usid, struct ksignal *ksig,
static inline int a32_setup_frame(int usid, struct ksignal *ksig,
				     sigset_t *set, struct pt_regs *regs)
{
	return -ENOSYS;
}

static inline int compat_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
static inline int a32_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
					struct pt_regs *regs)
{
	return -ENOSYS;
}

static inline void compat_setup_restart_syscall(struct pt_regs *regs)
static inline void a32_setup_restart_syscall(struct pt_regs *regs)
{
}
#endif /* CONFIG_AARCH32_EL0 */
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ typedef long (*syscall_fn_t)(const struct pt_regs *regs);
extern const syscall_fn_t sys_call_table[];

#ifdef CONFIG_AARCH32_EL0
extern const syscall_fn_t compat_sys_call_table[];
extern const syscall_fn_t a32_sys_call_table[];
#endif

static inline int syscall_get_nr(struct task_struct *task,
+3 −3
Original line number Diff line number Diff line
@@ -556,7 +556,7 @@ static int setend_set_hw_mode(bool enable)
	return 0;
}

static int compat_setend_handler(struct pt_regs *regs, u32 big_endian)
static int __a32_setend_handler(struct pt_regs *regs, u32 big_endian)
{
	char *insn;

@@ -579,14 +579,14 @@ static int compat_setend_handler(struct pt_regs *regs, u32 big_endian)

static int a32_setend_handler(struct pt_regs *regs, u32 instr)
{
	int rc = compat_setend_handler(regs, (instr >> 9) & 1);
	int rc = __a32_setend_handler(regs, (instr >> 9) & 1);
	arm64_skip_faulting_instruction(regs, 4);
	return rc;
}

static int t16_setend_handler(struct pt_regs *regs, u32 instr)
{
	int rc = compat_setend_handler(regs, (instr >> 3) & 1);
	int rc = __a32_setend_handler(regs, (instr >> 3) & 1);
	arm64_skip_faulting_instruction(regs, 2);
	return rc;
}
+2 −2
Original line number Diff line number Diff line
@@ -76,8 +76,8 @@ int main(void)
  DEFINE(S_FRAME_SIZE,		sizeof(struct pt_regs));
  BLANK();
#ifdef CONFIG_AARCH32_EL0
  DEFINE(COMPAT_SIGFRAME_REGS_OFFSET,		offsetof(struct compat_sigframe, uc.uc_mcontext.arm_r0));
  DEFINE(COMPAT_RT_SIGFRAME_REGS_OFFSET,	offsetof(struct compat_rt_sigframe, sig.uc.uc_mcontext.arm_r0));
  DEFINE(COMPAT_SIGFRAME_REGS_OFFSET,		offsetof(struct a32_sigframe, uc.uc_mcontext.arm_r0));
  DEFINE(COMPAT_RT_SIGFRAME_REGS_OFFSET,	offsetof(struct a32_rt_sigframe, sig.uc.uc_mcontext.arm_r0));
  BLANK();
#endif
  DEFINE(MM_CONTEXT_ID,		offsetof(struct mm_struct, context.id.counter));
Loading