提交 69bbb51d 编写于 作者: Y Yury Norov 提交者: Yang Yingliang

arm64: rename functions that reference compat term

hulk inclusion
category: feature
bugzilla: NA
CVE: NA
---------------------------

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: NYury Norov <ynorov@caviumnetworks.com>

 Conflicts:
	arch/arm64/kernel/cpufeature.c
	arch/arm64/kernel/sys32.c
	arch/arm64/kernel/sys_compat.c
	arch/arm64/kernel/syscall.c
	arch/arm64/kernel/traps.c

[wangxiongfeng: conflicts because of the following commit.
acf2a6efa arm64: use the correct function type for
__arm64_sys_ni_syscall
f5b984c22 arm64: compat: Don't pull syscall number from regs in
arm_compat_syscall
119703e85 arm64: cpufeature: Set the FP/SIMD compat HWCAP
So we only change 'compat_*' to 'a32_*'.

6a605e36 arm64: Force SSBS on context switch
Above commit add 'compat_user_mode()' in 'ssbs_thread_switch()'. We also
need to change it.
]
Signed-off-by: NXiongfeng Wang <wangxiongfeng2@huawei.com>
Reviewed-by: NHanjun Guo &lt;guohanjun@huawei.com <mailto:guohanjun@huawei.com&gt;>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 04c1ad60
......@@ -208,16 +208,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))
......@@ -236,10 +236,10 @@ static inline void forget_syscall(struct pt_regs *regs)
(!((regs)->pstate & PSR_F_BIT))
#define GET_USP(regs) \
(!compat_user_mode(regs) ? (regs)->sp : (regs)->compat_sp)
(!a32_user_mode(regs) ? (regs)->sp : (regs)->compat_sp)
#define SET_USP(ptregs, value) \
(!compat_user_mode(regs) ? ((regs)->sp = value) : ((regs)->compat_sp = value))
(!a32_user_mode(regs) ? ((regs)->sp = value) : ((regs)->compat_sp = value))
extern int regs_query_register_offset(const char *name);
extern unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
......
......@@ -24,27 +24,28 @@
#define AARCH32_KERN_SIGRET_CODE_OFFSET 0x500
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 */
......
......@@ -25,7 +25,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,
......
......@@ -559,7 +559,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;
......@@ -582,14 +582,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;
}
......
......@@ -1597,7 +1597,7 @@ static bool compat_has_neon(const struct arm64_cpu_capabilities *cap, int scope)
}
#endif
static const struct arm64_cpu_capabilities compat_elf_hwcaps[] = {
static const struct arm64_cpu_capabilities a32_elf_hwcaps[] = {
#ifdef CONFIG_AARCH32_EL0
HWCAP_CAP_MATCH(compat_has_neon, CAP_COMPAT_HWCAP, COMPAT_HWCAP_NEON),
HWCAP_CAP(SYS_MVFR1_EL1, MVFR1_SIMDFMAC_SHIFT, FTR_UNSIGNED, 1, CAP_COMPAT_HWCAP, COMPAT_HWCAP_VFPv4),
......@@ -1896,7 +1896,7 @@ static void verify_local_cpu_capabilities(void)
verify_local_elf_hwcaps(arm64_elf_hwcaps);
if (system_supports_32bit_el0())
verify_local_elf_hwcaps(compat_elf_hwcaps);
verify_local_elf_hwcaps(a32_elf_hwcaps);
if (system_supports_sve())
verify_sve_features();
......@@ -1967,7 +1967,7 @@ void __init setup_cpu_features(void)
setup_elf_hwcaps(arm64_elf_hwcaps);
if (system_supports_32bit_el0())
setup_elf_hwcaps(compat_elf_hwcaps);
setup_elf_hwcaps(a32_elf_hwcaps);
if (system_uses_ttbr0_pan())
pr_info("emulated: Privileged Access Never (PAN) using TTBR0_EL1 switching\n");
......
......@@ -343,10 +343,10 @@ int aarch32_break_handler(struct pt_regs *regs)
bool bp = false;
void __user *pc = (void __user *)instruction_pointer(regs);
if (!compat_user_mode(regs))
if (!a32_user_mode(regs))
return -EFAULT;
if (compat_thumb_mode(regs)) {
if (a32_thumb_mode(regs)) {
/* get 16-bit Thumb instruction */
__le16 instr;
get_user(instr, (__le16 __user *)pc);
......
......@@ -64,21 +64,21 @@ user_backtrace(struct frame_tail __user *tail,
* The registers we're interested in are at the end of the variable
* length saved register structure. The fp points at the end of this
* structure so the address of this struct is:
* (struct compat_frame_tail *)(xxx->fp)-1
* (struct a32_frame_tail *)(xxx->fp)-1
*
* This code has been adapted from the ARM OProfile support.
*/
struct compat_frame_tail {
compat_uptr_t fp; /* a (struct compat_frame_tail *) in compat mode */
struct a32_frame_tail {
compat_uptr_t fp; /* a (struct a32_frame_tail *) in compat mode */
u32 sp;
u32 lr;
} __attribute__((packed));
static struct compat_frame_tail __user *
compat_user_backtrace(struct compat_frame_tail __user *tail,
static struct a32_frame_tail __user *
compat_user_backtrace(struct a32_frame_tail __user *tail,
struct perf_callchain_entry_ctx *entry)
{
struct compat_frame_tail buftail;
struct a32_frame_tail buftail;
unsigned long err;
/* Also check accessibility of one struct frame_tail beyond */
......@@ -98,11 +98,11 @@ compat_user_backtrace(struct compat_frame_tail __user *tail,
* Frame pointers should strictly progress back up the stack
* (towards higher addresses).
*/
if (tail + 1 >= (struct compat_frame_tail __user *)
if (tail + 1 >= (struct a32_frame_tail __user *)
compat_ptr(buftail.fp))
return NULL;
return (struct compat_frame_tail __user *)compat_ptr(buftail.fp) - 1;
return (struct a32_frame_tail __user *)compat_ptr(buftail.fp) - 1;
}
#endif /* CONFIG_AARCH32_EL0 */
......@@ -116,7 +116,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
perf_callchain_store(entry, regs->pc);
if (!compat_user_mode(regs)) {
if (!a32_user_mode(regs)) {
/* AARCH64 mode */
struct frame_tail __user *tail;
......@@ -128,9 +128,9 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
} else {
#ifdef CONFIG_AARCH32_EL0
/* AARCH32 compat mode */
struct compat_frame_tail __user *tail;
struct a32_frame_tail __user *tail;
tail = (struct compat_frame_tail __user *)regs->compat_fp - 1;
tail = (struct a32_frame_tail __user *)regs->compat_fp - 1;
while ((entry->nr < entry->max_stack) &&
tail && !((unsigned long)tail & 0x3))
......
......@@ -36,7 +36,7 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
* At the time we make a sample, we don't know whether the consumer is
* 32-bit or 64-bit, so we have to cater for both possibilities.
*/
if (compat_user_mode(regs)) {
if (a32_user_mode(regs)) {
if ((u32)idx == PERF_REG_ARM64_SP)
return regs->compat_sp;
if ((u32)idx == PERF_REG_ARM64_LR)
......
......@@ -220,7 +220,7 @@ static void print_pstate(struct pt_regs *regs)
{
u64 pstate = regs->pstate;
if (compat_user_mode(regs)) {
if (a32_user_mode(regs)) {
printk("pstate: %08llx (%c%c%c%c %c %s %s %c%c%c)\n",
pstate,
pstate & PSR_AA32_N_BIT ? 'N' : 'n',
......@@ -254,7 +254,7 @@ void __show_regs(struct pt_regs *regs)
int i, top_reg;
u64 lr, sp;
if (compat_user_mode(regs)) {
if (a32_user_mode(regs)) {
lr = regs->compat_lr;
sp = regs->compat_sp;
top_reg = 12;
......@@ -477,7 +477,7 @@ static void ssbs_thread_switch(struct task_struct *next)
test_tsk_thread_flag(next, TIF_SSBD))
return;
if (compat_user_mode(regs))
if (a32_user_mode(regs))
set_compat_ssbs_bit(regs);
else if (user_mode(regs))
set_ssbs_bit(regs);
......
......@@ -791,7 +791,7 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
static void setup_restart_syscall(struct pt_regs *regs)
{
if (is_compat_task())
compat_setup_restart_syscall(regs);
a32_setup_restart_syscall(regs);
else
regs->regs[8] = __NR_restart_syscall;
}
......@@ -812,9 +812,9 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
*/
if (is_compat_task()) {
if (ksig->ka.sa.sa_flags & SA_SIGINFO)
ret = compat_setup_rt_frame(usig, ksig, oldset, regs);
ret = a32_setup_rt_frame(usig, ksig, oldset, regs);
else
ret = compat_setup_frame(usig, ksig, oldset, regs);
ret = a32_setup_frame(usig, ksig, oldset, regs);
} else {
ret = setup_rt_frame(usig, ksig, oldset, regs);
}
......@@ -849,7 +849,7 @@ static void do_signal(struct pt_regs *regs)
*/
if (syscall) {
continue_addr = regs->pc;
restart_addr = continue_addr - (compat_thumb_mode(regs) ? 2 : 4);
restart_addr = continue_addr - (a32_thumb_mode(regs) ? 2 : 4);
retval = regs->regs[0];
/*
......
......@@ -30,7 +30,7 @@
#include <linux/uaccess.h>
#include <asm/unistd.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;
......@@ -56,17 +56,17 @@ 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_vfp_sigframe {
struct a32_vfp_sigframe {
compat_ulong_t magic;
compat_ulong_t size;
struct compat_user_vfp {
......@@ -81,25 +81,25 @@ struct compat_vfp_sigframe {
} __attribute__((__aligned__(8)));
#define VFP_MAGIC 0x56465001
#define VFP_STORAGE_SIZE sizeof(struct compat_vfp_sigframe)
#define VFP_STORAGE_SIZE sizeof(struct a32_vfp_sigframe)
#define FSR_WRITE_SHIFT (11)
struct compat_aux_sigframe {
struct compat_vfp_sigframe vfp;
struct a32_aux_sigframe {
struct a32_vfp_sigframe vfp;
/* Something that isn't a valid magic number for any coprocessor. */
unsigned long end_magic;
} __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;
};
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
......@@ -130,7 +130,7 @@ static inline int get_sigset_t(sigset_t *set,
* VFP save/restore code.
*
* We have to be careful with endianness, since the fpsimd context-switch
* code operates on 128-bit (Q) register values whereas the compat ABI
* code operates on 128-bit (Q) register values whereas the a32 ABI
* uses an array of 64-bit (D) registers. Consequently, we need to swap
* the two halves of each Q register when running on a big-endian CPU.
*/
......@@ -147,7 +147,7 @@ union __fpsimd_vreg {
};
};
static int compat_preserve_vfp_context(struct compat_vfp_sigframe __user *frame)
static int a32_preserve_vfp_context(struct a32_vfp_sigframe __user *frame)
{
struct user_fpsimd_state const *fpsimd =
&current->thread.uw.fpsimd_state;
......@@ -197,7 +197,7 @@ static int compat_preserve_vfp_context(struct compat_vfp_sigframe __user *frame)
return err ? -EFAULT : 0;
}
static int compat_restore_vfp_context(struct compat_vfp_sigframe __user *frame)
static int a32_restore_vfp_context(struct a32_vfp_sigframe __user *frame)
{
struct user_fpsimd_state fpsimd;
compat_ulong_t magic = VFP_MAGIC;
......@@ -237,12 +237,12 @@ static int compat_restore_vfp_context(struct compat_vfp_sigframe __user *frame)
return err ? -EFAULT : 0;
}
static int compat_restore_sigframe(struct pt_regs *regs,
struct compat_sigframe __user *sf)
static int a32_restore_sigframe(struct pt_regs *regs,
struct a32_sigframe __user *sf)
{
int err;
sigset_t set;
struct compat_aux_sigframe __user *aux;
struct a32_aux_sigframe __user *aux;
unsigned long psr;
err = get_sigset_t(&set, &sf->uc.uc_sigmask);
......@@ -278,9 +278,9 @@ static int compat_restore_sigframe(struct pt_regs *regs,
err |= !valid_user_regs(&regs->user_regs, current);
aux = (struct compat_aux_sigframe __user *) sf->uc.uc_regspace;
aux = (struct a32_aux_sigframe __user *) sf->uc.uc_regspace;
if (err == 0)
err |= compat_restore_vfp_context(&aux->vfp);
err |= a32_restore_vfp_context(&aux->vfp);
return err;
}
......@@ -288,7 +288,7 @@ static int compat_restore_sigframe(struct pt_regs *regs,
COMPAT_SYSCALL_DEFINE0(sigreturn)
{
struct pt_regs *regs = current_pt_regs();
struct compat_sigframe __user *frame;
struct a32_sigframe __user *frame;
/* Always make any pending restarted system calls return -EINTR */
current->restart_block.fn = do_no_restart_syscall;
......@@ -301,12 +301,12 @@ COMPAT_SYSCALL_DEFINE0(sigreturn)
if (regs->compat_sp & 7)
goto badframe;
frame = (struct compat_sigframe __user *)regs->compat_sp;
frame = (struct a32_sigframe __user *)regs->compat_sp;
if (!access_ok(frame, sizeof (*frame)))
goto badframe;
if (compat_restore_sigframe(regs, frame))
if (a32_restore_sigframe(regs, frame))
goto badframe;
return regs->regs[0];
......@@ -319,7 +319,7 @@ COMPAT_SYSCALL_DEFINE0(sigreturn)
COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
{
struct pt_regs *regs = current_pt_regs();
struct compat_rt_sigframe __user *frame;
struct a32_rt_sigframe __user *frame;
/* Always make any pending restarted system calls return -EINTR */
current->restart_block.fn = do_no_restart_syscall;
......@@ -332,12 +332,12 @@ COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
if (regs->compat_sp & 7)
goto badframe;
frame = (struct compat_rt_sigframe __user *)regs->compat_sp;
frame = (struct a32_rt_sigframe __user *)regs->compat_sp;
if (!access_ok(frame, sizeof (*frame)))
goto badframe;
if (compat_restore_sigframe(regs, &frame->sig))
if (a32_restore_sigframe(regs, &frame->sig))
goto badframe;
if (compat_restore_altstack(&frame->sig.uc.uc_stack))
......@@ -350,7 +350,7 @@ COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
return 0;
}
static void __user *compat_get_sigframe(struct ksignal *ksig,
static void __user *a32_get_sigframe(struct ksignal *ksig,
struct pt_regs *regs,
int framesize)
{
......@@ -371,7 +371,7 @@ static void __user *compat_get_sigframe(struct ksignal *ksig,
return frame;
}
static void compat_setup_return(struct pt_regs *regs, struct k_sigaction *ka,
static void a32_setup_return(struct pt_regs *regs, struct k_sigaction *ka,
compat_ulong_t __user *rc, void __user *frame,
int usig)
{
......@@ -415,10 +415,10 @@ static void compat_setup_return(struct pt_regs *regs, struct k_sigaction *ka,
regs->pstate = spsr;
}
static int compat_setup_sigframe(struct compat_sigframe __user *sf,
static int a32_setup_sigframe(struct a32_sigframe __user *sf,
struct pt_regs *regs, sigset_t *set)
{
struct compat_aux_sigframe __user *aux;
struct a32_aux_sigframe __user *aux;
unsigned long psr = pstate_to_compat_psr(regs->pstate);
int err = 0;
......@@ -441,7 +441,7 @@ static int compat_setup_sigframe(struct compat_sigframe __user *sf,
__put_user_error(psr, &sf->uc.uc_mcontext.arm_cpsr, err);
__put_user_error((compat_ulong_t)0, &sf->uc.uc_mcontext.trap_no, err);
/* set the compat FSR WnR */
/* set the aarch32 FSR WnR */
__put_user_error(!!(current->thread.fault_code & ESR_ELx_WNR) <<
FSR_WRITE_SHIFT, &sf->uc.uc_mcontext.error_code, err);
__put_user_error(current->thread.fault_address, &sf->uc.uc_mcontext.fault_address, err);
......@@ -449,25 +449,25 @@ static int compat_setup_sigframe(struct compat_sigframe __user *sf,
err |= put_sigset_t(&sf->uc.uc_sigmask, set);
aux = (struct compat_aux_sigframe __user *) sf->uc.uc_regspace;
aux = (struct a32_aux_sigframe __user *) sf->uc.uc_regspace;
if (err == 0)
err |= compat_preserve_vfp_context(&aux->vfp);
err |= a32_preserve_vfp_context(&aux->vfp);
__put_user_error(0, &aux->end_magic, err);
return err;
}
/*
* 32-bit signal handling routines called from signal.c
* aarch32-bit signal handling routines called from signal.c
*/
int compat_setup_rt_frame(int usig, struct ksignal *ksig,
int a32_setup_rt_frame(int usig, struct ksignal *ksig,
sigset_t *set, struct pt_regs *regs)
{
struct compat_rt_sigframe __user *frame;
struct a32_rt_sigframe __user *frame;
int err = 0;
frame = compat_get_sigframe(ksig, regs, sizeof(*frame));
frame = a32_get_sigframe(ksig, regs, sizeof(*frame));
if (!frame)
return 1;
......@@ -479,10 +479,10 @@ int compat_setup_rt_frame(int usig, struct ksignal *ksig,
err |= __compat_save_altstack(&frame->sig.uc.uc_stack, regs->compat_sp);
err |= compat_setup_sigframe(&frame->sig, regs, set);
err |= a32_setup_sigframe(&frame->sig, regs, set);
if (err == 0) {
compat_setup_return(regs, &ksig->ka, frame->sig.retcode, frame, usig);
a32_setup_return(regs, &ksig->ka, frame->sig.retcode, frame, usig);
regs->regs[1] = (compat_ulong_t)(unsigned long)&frame->info;
regs->regs[2] = (compat_ulong_t)(unsigned long)&frame->sig.uc;
}
......@@ -490,27 +490,27 @@ int compat_setup_rt_frame(int usig, struct ksignal *ksig,
return err;
}
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)
{
struct compat_sigframe __user *frame;
struct a32_sigframe __user *frame;
int err = 0;
frame = compat_get_sigframe(ksig, regs, sizeof(*frame));
frame = a32_get_sigframe(ksig, regs, sizeof(*frame));
if (!frame)
return 1;
__put_user_error(0x5ac3c35a, &frame->uc.uc_flags, err);
err |= compat_setup_sigframe(frame, regs, set);
err |= a32_setup_sigframe(frame, regs, set);
if (err == 0)
compat_setup_return(regs, &ksig->ka, frame->retcode, frame, usig);
a32_setup_return(regs, &ksig->ka, frame->retcode, frame, usig);
return err;
}
void compat_setup_restart_syscall(struct pt_regs *regs)
void a32_setup_restart_syscall(struct pt_regs *regs)
{
regs->regs[7] = __NR_compat_restart_syscall;
}
......@@ -140,7 +140,7 @@ COMPAT_SYSCALL_DEFINE6(aarch32_fallocate, int, fd, int, mode,
#undef __SYSCALL
#define __SYSCALL(nr, sym) [nr] = __arm64_##sym,
const syscall_fn_t compat_sys_call_table[__NR_compat_syscalls] = {
const syscall_fn_t a32_sys_call_table[__NR_compat_syscalls] = {
[0 ... __NR_compat_syscalls - 1] = __arm64_sys_ni_syscall,
#include <asm/unistd32.h>
};
......@@ -33,7 +33,7 @@
#include <asm/unistd.h>
static long
__do_compat_cache_op(unsigned long start, unsigned long end)
__do_a32_cache_op(unsigned long start, unsigned long end)
{
long ret;
......@@ -64,7 +64,7 @@ __do_compat_cache_op(unsigned long start, unsigned long end)
}
static inline long
do_compat_cache_op(unsigned long start, unsigned long end, int flags)
do_a32_cache_op(unsigned long start, unsigned long end, int flags)
{
if (end < start || flags)
return -EINVAL;
......@@ -72,12 +72,12 @@ do_compat_cache_op(unsigned long start, unsigned long end, int flags)
if (!access_ok((const void __user *)start, end - start))
return -EFAULT;
return __do_compat_cache_op(start, end);
return __do_a32_cache_op(start, end);
}
/*
* Handle all unrecognised system calls.
*/
long compat_arm_syscall(struct pt_regs *regs, int scno)
long a32_arm_syscall(struct pt_regs *regs, int scno)
{
siginfo_t info;
......@@ -97,7 +97,7 @@ long compat_arm_syscall(struct pt_regs *regs, int scno)
* the specified region).
*/
case __ARM_NR_compat_cacheflush:
return do_compat_cache_op(regs->regs[0], regs->regs[1], regs->regs[2]);
return do_a32_cache_op(regs->regs[0], regs->regs[1], regs->regs[2]);
case __ARM_NR_compat_set_tls:
current->thread.uw.tp_value = regs->regs[0];
......@@ -127,7 +127,7 @@ long compat_arm_syscall(struct pt_regs *regs, int scno)
info.si_errno = 0;
info.si_code = ILL_ILLTRP;
info.si_addr = (void __user *)instruction_pointer(regs) -
(compat_thumb_mode(regs) ? 2 : 4);
(a32_thumb_mode(regs) ? 2 : 4);
arm64_notify_die("Oops - bad compat syscall(2)", regs, &info, scno);
return 0;
......
......@@ -14,7 +14,7 @@
#include <asm/thread_info.h>
#include <asm/unistd.h>
long compat_arm_syscall(struct pt_regs *regs, int scno);
long a32_arm_syscall(struct pt_regs *regs, int scno);
long sys_ni_syscall(void);
static long do_ni_syscall(struct pt_regs *regs, int scno)
......@@ -22,7 +22,7 @@ static long do_ni_syscall(struct pt_regs *regs, int scno)
#ifdef CONFIG_AARCH32_EL0
long ret;
if (is_compat_task()) {
ret = compat_arm_syscall(regs, scno);
ret = a32_arm_syscall(regs, scno);
if (ret != -ENOSYS)
return ret;
}
......@@ -167,6 +167,6 @@ asmlinkage void el0_svc_handler(struct pt_regs *regs)
asmlinkage void el0_svc_compat_handler(struct pt_regs *regs)
{
el0_svc_common(regs, regs->regs[7], __NR_compat_syscalls,
compat_sys_call_table);
a32_sys_call_table);
}
#endif
......@@ -318,7 +318,7 @@ static int call_undef_hook(struct pt_regs *regs)
if (probe_kernel_address((__force __le32 *)pc, instr_le))
goto exit;
instr = le32_to_cpu(instr_le);
} else if (compat_thumb_mode(regs)) {
} else if (a32_thumb_mode(regs)) {
/* 16-bit Thumb instruction */
__le16 instr_le;
if (get_user(instr_le, (__le16 __user *)pc))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册