Commit ee468438 authored by Yury Norov's avatar Yury Norov Committed by Jinjie Ruan
Browse files

arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64

maillist inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8JVJ3
CVE: NA

Reference: https://github.com/norov/linux/commits/ilp32-5.2



--------------------------------

ILP32 tasks are needed to be distinguished from LP64 and AARCH32.
This patch adds helper functions is_ilp32_compat_{task,thread} and
thread flag TIF_32BIT_AARCH64 to address it. This is a preparation
for following patches in ILP32 patchset.

For consistency, SET_PERSONALITY is changed here accordingly.

Signed-off-by: default avatarAndrew Pinski <Andrew.Pinski@caviumnetworks.com>
Signed-off-by: default avatarPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>
Signed-off-by: default avatarChristoph Muellner <christoph.muellner@theobroma-systems.com>
Signed-off-by: default avatarYury Norov <ynorov@caviumnetworks.com>
Reviewed-by: default avatarDavid Daney <ddaney@caviumnetworks.com>
Signed-off-by: default avatarYury Norov <ynorov@marvell.com>
Signed-off-by: default avatarXiongfeng Wang <wangxiongfeng2@huawei.com>
Acked-by: default avatarXie XiuQi <xiexiuqi@huawei.com>
Signed-off-by: default avatarChen Jun <chenjun102@huawei.com>
Signed-off-by: default avatarChen Jiahao <chenjiahao16@huawei.com>

Conflicts:
	arch/arm64/include/asm/compat.h

Signed-off-by: default avatarJinjie Ruan <ruanjinjie@huawei.com>
parent 081e8aa6
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -164,6 +164,7 @@ typedef struct user_fpsimd_state elf_fpregset_t;

#define SET_PERSONALITY(ex)						\
({									\
	clear_thread_flag(TIF_32BIT_AARCH64);				\
	clear_thread_flag(TIF_32BIT);					\
	current->personality &= ~READ_IMPLIES_EXEC;			\
})
@@ -223,6 +224,7 @@ int compat_elf_check_arch(const struct elf32_hdr *);
 */
#define COMPAT_SET_PERSONALITY(ex)					\
({									\
	clear_thread_flag(TIF_32BIT_AARCH64);				\
	set_thread_flag(TIF_32BIT);					\
 })
#ifdef CONFIG_COMPAT_VDSO
+28 −2
Original line number Diff line number Diff line
@@ -33,18 +33,44 @@ static inline int is_a32_compat_thread(struct thread_info *thread)

#endif /* CONFIG_AARCH32_EL0 */

#ifdef CONFIG_ARM64_ILP32

static inline int is_ilp32_compat_task(void)
{
	return test_thread_flag(TIF_32BIT_AARCH64);
}

static inline int is_ilp32_compat_thread(struct thread_info *thread)
{
	return test_ti_thread_flag(thread, TIF_32BIT_AARCH64);
}

#else

static inline int is_ilp32_compat_task(void)
{
	return 0;
}

static inline int is_ilp32_compat_thread(struct thread_info *thread)
{
	return 0;
}

#endif /* CONFIG_ARM64_ILP32 */

#ifdef CONFIG_COMPAT

static inline int is_compat_task(void)
{
	return is_a32_compat_task();
	return is_a32_compat_task() || is_ilp32_compat_task();
}

#endif /* CONFIG_COMPAT */

static inline int is_compat_thread(struct thread_info *thread)
{
	return is_a32_compat_thread(thread);
	return is_a32_compat_thread(thread) || is_ilp32_compat_thread(thread);
}


+2 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ void arch_setup_new_exec(void);
#define TIF_TAGGED_ADDR		26	/* Allow tagged user addresses */
#define TIF_SME			27	/* SME in use */
#define TIF_SME_VL_INHERIT	28	/* Inherit SME vl_onexec across exec */
#define TIF_32BIT_AARCH64	29	/* 32 bit process on AArch64(ILP32) */

#define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
#define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
@@ -96,6 +97,7 @@ void arch_setup_new_exec(void);
#define _TIF_SVE		(1 << TIF_SVE)
#define _TIF_MTE_ASYNC_FAULT	(1 << TIF_MTE_ASYNC_FAULT)
#define _TIF_NOTIFY_SIGNAL	(1 << TIF_NOTIFY_SIGNAL)
#define _TIF_32BIT_AARCH64	(1 << TIF_32BIT_AARCH64)

#define _TIF_WORK_MASK		(_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
				 _TIF_NOTIFY_RESUME | _TIF_FOREIGN_FPSTATE | \