Commit c6c09f78 authored by Xiongfeng Wang's avatar Xiongfeng Wang Committed by Jinjie Ruan
Browse files

arm64: rename functions that reference compat term

maillist inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8JVJ3
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>
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>
Signed-off-by: default avatarChen Jiahao <chenjiahao16@huawei.com>
Signed-off-by: default avatarJinjie Ruan <ruanjinjie@huawei.com>
parent dbece8b0
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -218,16 +218,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))

@@ -247,7 +247,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;
}
@@ -327,7 +327,7 @@ static inline unsigned long regs_return_value(struct pt_regs *regs)
	 * syscall_get_return_value(). Apply the same sign-extension here until
	 * audit is updated to use syscall_get_return_value().
	 */
	if (compat_user_mode(regs))
	if (a32_user_mode(regs))
		val = sign_extend64(val, 31);

	return val;
+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,
+7 −7
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ static int swp_handler(struct pt_regs *regs, u32 instr)
static bool try_emulate_swp(struct pt_regs *regs, u32 insn)
{
	/* SWP{B} only exists in ARM state and does not exist in Thumb */
	if (!compat_user_mode(regs) || compat_thumb_mode(regs))
	if (!a32_user_mode(regs) || a32_thumb_mode(regs))
		return false;

	if ((insn & 0x0fb00ff0) != 0x01000090)
@@ -315,7 +315,7 @@ static int cp15_barrier_set_hw_mode(bool enable)

static bool try_emulate_cp15_barrier(struct pt_regs *regs, u32 insn)
{
	if (!compat_user_mode(regs) || compat_thumb_mode(regs))
	if (!a32_user_mode(regs) || a32_thumb_mode(regs))
		return false;

	if ((insn & 0x0fff0fdf) == 0x0e070f9a)
@@ -348,7 +348,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;

@@ -371,25 +371,25 @@ 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;
}

static bool try_emulate_setend(struct pt_regs *regs, u32 insn)
{
	if (compat_thumb_mode(regs) &&
	if (a32_thumb_mode(regs) &&
	    (insn & 0xfffffff7) == 0x0000b650)
		return t16_setend_handler(regs, insn) == 0;

	if (compat_user_mode(regs) &&
	if (a32_user_mode(regs) &&
	    (insn & 0xfffffdff) == 0xf1010000)
		return a32_setend_handler(regs, insn) == 0;

+2 −2
Original line number Diff line number Diff line
@@ -100,8 +100,8 @@ int main(void)
  BLANK();
#endif
#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