[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210416075533.7720-2-zhe.he@windriver.com>
Date: Fri, 16 Apr 2021 15:55:32 +0800
From: He Zhe <zhe.he@...driver.com>
To: oleg@...hat.com, catalin.marinas@....com, will@...nel.org,
linux-arm-kernel@...ts.infradead.org, paul@...l-moore.com,
eparis@...hat.com, linux-audit@...hat.com,
linux-kernel@...r.kernel.org, zhe.he@...driver.com
Subject: [PATCH 2/3] arm64: syscall.h: Add sign extension handling in syscall_get_return_value for compat
Add sign extension handling in syscall_get_return_value so that it can
handle 32-bit compatible case and can be used by for example audit, just
like what syscall_get_error does.
Signed-off-by: He Zhe <zhe.he@...driver.com>
---
arch/arm64/include/asm/syscall.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/include/asm/syscall.h b/arch/arm64/include/asm/syscall.h
index cfc0672013f6..cd7a22787aeb 100644
--- a/arch/arm64/include/asm/syscall.h
+++ b/arch/arm64/include/asm/syscall.h
@@ -44,7 +44,12 @@ static inline long syscall_get_error(struct task_struct *task,
static inline long syscall_get_return_value(struct task_struct *task,
struct pt_regs *regs)
{
- return regs->regs[0];
+ long val = regs->regs[0];
+
+ if (is_compat_thread(task_thread_info(task)))
+ val = sign_extend64(val, 31);
+
+ return val;
}
static inline void syscall_set_return_value(struct task_struct *task,
--
2.17.1
Powered by blists - more mailing lists