On Wed, May 01, 2019 at 01:04:50PM -0700, Sami Tolvanen wrote: > Use const struct pt_regs * instead of struct pt_regs * as > the argument type to fix indirect call type mismatches with > Control-Flow Integrity checking.
It's probably worth noting that in <asm/syscall_wrapper.h> all syscall wrappers take a const struct pt_regs *, which is where the mismatch comes from. > > Signed-off-by: Sami Tolvanen <samitolva...@google.com> > --- > arch/arm64/include/asm/syscall.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm64/include/asm/syscall.h > b/arch/arm64/include/asm/syscall.h > index a179df3674a1a..6206ab9bfcfc5 100644 > --- a/arch/arm64/include/asm/syscall.h > +++ b/arch/arm64/include/asm/syscall.h > @@ -20,7 +20,7 @@ > #include <linux/compat.h> > #include <linux/err.h> > > -typedef long (*syscall_fn_t)(struct pt_regs *regs); > +typedef long (*syscall_fn_t)(const struct pt_regs *regs); For a second I was worried that we modify the regs to assign the return value, but I see we do that in the syscall.c wrapper, where the pt_regs argument isn't const. We certainly chouldn't need to modify the regs when acquiring the arguments, and as above this matches <asm/syscall_wrapper.h>, so this looks sound to me. FWIW: Reviewed-by: Mark Rutland <mark.rutl...@arm.com> Thanks, Mark.