Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa8bbd2c authored by Sami Tolvanen's avatar Sami Tolvanen
Browse files

ANDROID: arm64: fix function types in COND_SYSCALL



Define a weak function for COND_SYSCALL instead of creating a weak
alias to a function with an incompatible type. This fixes indirect
call mismatches with Control-Flow Integrity.

Bug: 138254717
Change-Id: I3a9a8162f30ff63cea2002304f70152b7cc8f746
Signed-off-by: default avatarSami Tolvanen <samitolvanen@google.com>
parent 16930251
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@
#ifndef __ASM_SYSCALL_WRAPPER_H
#define __ASM_SYSCALL_WRAPPER_H

struct pt_regs;

#define SC_ARM64_REGS_TO_ARGS(x, ...)				\
	__MAP(x,__SC_ARGS					\
	      ,,regs->regs[0],,regs->regs[1],,regs->regs[2]	\
@@ -36,7 +38,10 @@
	asmlinkage long __arm64_compat_sys_##sname(const struct pt_regs *__unused)

#define COND_SYSCALL_COMPAT(name) 							\
	cond_syscall(__arm64_compat_sys_##name);
	asmlinkage __weak long __arm64_compat_sys_##name(const struct pt_regs *__unused)\
	{										\
		return sys_ni_syscall();						\
	}

#define COMPAT_SYS_NI(name) \
	SYSCALL_ALIAS(__arm64_compat_sys_##name, sys_ni_posix_timers);
@@ -70,7 +75,11 @@
#endif

#ifndef COND_SYSCALL
#define COND_SYSCALL(name) cond_syscall(__arm64_sys_##name)
#define COND_SYSCALL(name)							\
	asmlinkage __weak long __arm64_sys_##name(const struct pt_regs *regs)	\
	{									\
		return sys_ni_syscall();					\
	}
#endif

#ifndef SYS_NI