Doesn't change any behaviour from what I can see. Reviewed-by: Alistair Popple <alist...@popple.id.au>
On Friday, 1 May 2020 1:42:08 PM AEST Jordan Niethe wrote: > Define specific __get_user_instr() and __get_user_instr_inatomic() > macros for reading instructions from user space. > > Signed-off-by: Jordan Niethe <jniet...@gmail.com> > --- > arch/powerpc/include/asm/uaccess.h | 5 +++++ > arch/powerpc/kernel/align.c | 2 +- > arch/powerpc/kernel/hw_breakpoint.c | 2 +- > arch/powerpc/kernel/vecemu.c | 2 +- > 4 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/arch/powerpc/include/asm/uaccess.h > b/arch/powerpc/include/asm/uaccess.h index 2f500debae21..c0a35e4586a5 > 100644 > --- a/arch/powerpc/include/asm/uaccess.h > +++ b/arch/powerpc/include/asm/uaccess.h > @@ -105,6 +105,11 @@ static inline int __access_ok(unsigned long addr, > unsigned long size, #define __put_user_inatomic(x, ptr) \ > __put_user_nosleep((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) > > +#define __get_user_instr(x, ptr) \ > + __get_user_nocheck((x).val, (u32 *)(ptr), sizeof(u32), true) > + > +#define __get_user_instr_inatomic(x, ptr) \ > + __get_user_nosleep((x).val, (u32 *)(ptr), sizeof(u32)) > extern long __put_user_bad(void); > > /* > diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c > index 9e66e6c62354..b8f56052c6fe 100644 > --- a/arch/powerpc/kernel/align.c > +++ b/arch/powerpc/kernel/align.c > @@ -304,7 +304,7 @@ int fix_alignment(struct pt_regs *regs) > */ > CHECK_FULL_REGS(regs); > > - if (unlikely(__get_user(instr.val, (unsigned int __user *)regs->nip))) > + if (unlikely(__get_user_instr(instr, (void __user *)regs->nip))) > return -EFAULT; > if ((regs->msr & MSR_LE) != (MSR_KERNEL & MSR_LE)) { > /* We don't handle PPC little-endian any more... */ > diff --git a/arch/powerpc/kernel/hw_breakpoint.c > b/arch/powerpc/kernel/hw_breakpoint.c index 2db9a7ac7bcb..423603c92c0f > 100644 > --- a/arch/powerpc/kernel/hw_breakpoint.c > +++ b/arch/powerpc/kernel/hw_breakpoint.c > @@ -249,7 +249,7 @@ static bool stepping_handler(struct pt_regs *regs, > struct perf_event *bp, struct instruction_op op; > unsigned long addr = info->address; > > - if (__get_user_inatomic(instr.val, (unsigned int *)regs->nip)) > + if (__get_user_instr_inatomic(instr, (void __user *)regs->nip)) > goto fail; > > ret = analyse_instr(&op, regs, instr); > diff --git a/arch/powerpc/kernel/vecemu.c b/arch/powerpc/kernel/vecemu.c > index bb262707fb5c..adcdba6d534e 100644 > --- a/arch/powerpc/kernel/vecemu.c > +++ b/arch/powerpc/kernel/vecemu.c > @@ -266,7 +266,7 @@ int emulate_altivec(struct pt_regs *regs) > unsigned int va, vb, vc, vd; > vector128 *vrs; > > - if (get_user(instr.val, (unsigned int __user *) regs->nip)) > + if (__get_user_instr(instr, (void __user *) regs->nip)) > return -EFAULT; > > word = ppc_inst_val(instr);