Re: [PATCH] arch/arm: enable task isolation functionality
On 9/22/2016 5:54 PM, Francis Giraldeau wrote: This patch is a port of the task isolation functionality to the arm 32-bit architecture. The task isolation needs an additional thread flag that requires to change the entry assembly code to accept a bitfield larger than one byte. The constants _TIF_SYSCALL_WORK and _TIF_WORK_MASK are now defined in the literal pool. The rest of the patch is straightforward and reflects what is done on other architectures. Signed-off-by: Francis Giraldeau--- arch/arm/Kconfig | 1 + arch/arm/include/asm/thread_info.h | 8 ++-- arch/arm/kernel/entry-common.S | 15 ++- arch/arm/kernel/ptrace.c | 10 ++ arch/arm/kernel/signal.c | 12 +++- arch/arm/kernel/smp.c | 4 arch/arm/mm/fault.c| 9 - tools/testing/selftests/task_isolation/isolation.c | 14 ++ 8 files changed, 60 insertions(+), 13 deletions(-) Thanks! I've merged this into the dataplane tree and will plan to try to keep it updated (buildable at least) with any further changes. -- Chris Metcalf, Mellanox Technologies http://www.mellanox.com
Re: [PATCH] arch/arm: enable task isolation functionality
On 9/22/2016 5:54 PM, Francis Giraldeau wrote: This patch is a port of the task isolation functionality to the arm 32-bit architecture. The task isolation needs an additional thread flag that requires to change the entry assembly code to accept a bitfield larger than one byte. The constants _TIF_SYSCALL_WORK and _TIF_WORK_MASK are now defined in the literal pool. The rest of the patch is straightforward and reflects what is done on other architectures. Signed-off-by: Francis Giraldeau --- arch/arm/Kconfig | 1 + arch/arm/include/asm/thread_info.h | 8 ++-- arch/arm/kernel/entry-common.S | 15 ++- arch/arm/kernel/ptrace.c | 10 ++ arch/arm/kernel/signal.c | 12 +++- arch/arm/kernel/smp.c | 4 arch/arm/mm/fault.c| 9 - tools/testing/selftests/task_isolation/isolation.c | 14 ++ 8 files changed, 60 insertions(+), 13 deletions(-) Thanks! I've merged this into the dataplane tree and will plan to try to keep it updated (buildable at least) with any further changes. -- Chris Metcalf, Mellanox Technologies http://www.mellanox.com
[PATCH] arch/arm: enable task isolation functionality
This patch is a port of the task isolation functionality to the arm 32-bit architecture. The task isolation needs an additional thread flag that requires to change the entry assembly code to accept a bitfield larger than one byte. The constants _TIF_SYSCALL_WORK and _TIF_WORK_MASK are now defined in the literal pool. The rest of the patch is straightforward and reflects what is done on other architectures. Signed-off-by: Francis Giraldeau--- arch/arm/Kconfig | 1 + arch/arm/include/asm/thread_info.h | 8 ++-- arch/arm/kernel/entry-common.S | 15 ++- arch/arm/kernel/ptrace.c | 10 ++ arch/arm/kernel/signal.c | 12 +++- arch/arm/kernel/smp.c | 4 arch/arm/mm/fault.c| 9 - tools/testing/selftests/task_isolation/isolation.c | 14 ++ 8 files changed, 60 insertions(+), 13 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 018ee76..0b147e4 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -40,6 +40,7 @@ config ARM select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU select HAVE_ARCH_MMAP_RND_BITS if MMU select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT) + select HAVE_ARCH_TASK_ISOLATION select HAVE_ARCH_TRACEHOOK select HAVE_ARM_SMCCC if CPU_V7 select HAVE_CBPF_JIT diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h index 776757d..c83ce56 100644 --- a/arch/arm/include/asm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h @@ -145,6 +145,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, #define TIF_SECCOMP7 /* seccomp syscall filtering active */ #define TIF_NOHZ 12 /* in adaptive nohz mode */ +#define TIF_TASK_ISOLATION 13 /* task isolation active */ #define TIF_USING_IWMMXT 17 #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ #define TIF_RESTORE_SIGMASK20 @@ -158,16 +159,19 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, #define _TIF_SYSCALL_TRACEPOINT(1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT) +#define _TIF_TASK_ISOLATION(1 << TIF_TASK_ISOLATION) /* Checks for any syscall work in entry-common.S */ #define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ - _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP) + _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP | \ + _TIF_TASK_ISOLATION) /* * Change these and you break ASM code in entry-common.S */ #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \ -_TIF_NOTIFY_RESUME | _TIF_UPROBE) +_TIF_NOTIFY_RESUME | _TIF_UPROBE | \ +_TIF_TASK_ISOLATION) #endif /* __KERNEL__ */ #endif /* __ASM_ARM_THREAD_INFO_H */ diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 10c3283..dd8c45b 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -36,7 +36,8 @@ ret_fast_syscall: UNWIND(.cantunwind) disable_irq_notrace @ disable interrupts ldr r1, [tsk, #TI_FLAGS]@ re-check for syscall tracing - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK + ldr r2, =_TIF_SYSCALL_WORK | _TIF_WORK_MASK + tst r1, r2 bne fast_work_pending /* perform architecture specific actions before user return */ @@ -62,7 +63,8 @@ ret_fast_syscall: str r0, [sp, #S_R0 + S_OFF]!@ save returned r0 disable_irq_notrace @ disable interrupts ldr r1, [tsk, #TI_FLAGS]@ re-check for syscall tracing - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK + ldr r2, =_TIF_SYSCALL_WORK | _TIF_WORK_MASK + tst r1, r2 beq no_work_pending UNWIND(.fnend ) ENDPROC(ret_fast_syscall) @@ -70,7 +72,8 @@ ENDPROC(ret_fast_syscall) /* Slower path - fall through to work_pending */ #endif - tst r1, #_TIF_SYSCALL_WORK + ldr r2, =_TIF_SYSCALL_WORK + tst r1, r2 bne __sys_trace_return_nosave slow_work_pending: mov r0, sp @ 'regs' @@ -94,7 +97,8 @@ ret_slow_syscall: disable_irq_notrace @ disable interrupts ENTRY(ret_to_user_from_irq) ldr r1, [tsk, #TI_FLAGS] - tst r1, #_TIF_WORK_MASK + ldr r2, =_TIF_WORK_MASK + tst r1, r2 bne slow_work_pending no_work_pending: asm_trace_hardirqs_on
[PATCH] arch/arm: enable task isolation functionality
This patch is a port of the task isolation functionality to the arm 32-bit architecture. The task isolation needs an additional thread flag that requires to change the entry assembly code to accept a bitfield larger than one byte. The constants _TIF_SYSCALL_WORK and _TIF_WORK_MASK are now defined in the literal pool. The rest of the patch is straightforward and reflects what is done on other architectures. Signed-off-by: Francis Giraldeau --- arch/arm/Kconfig | 1 + arch/arm/include/asm/thread_info.h | 8 ++-- arch/arm/kernel/entry-common.S | 15 ++- arch/arm/kernel/ptrace.c | 10 ++ arch/arm/kernel/signal.c | 12 +++- arch/arm/kernel/smp.c | 4 arch/arm/mm/fault.c| 9 - tools/testing/selftests/task_isolation/isolation.c | 14 ++ 8 files changed, 60 insertions(+), 13 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 018ee76..0b147e4 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -40,6 +40,7 @@ config ARM select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU select HAVE_ARCH_MMAP_RND_BITS if MMU select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT) + select HAVE_ARCH_TASK_ISOLATION select HAVE_ARCH_TRACEHOOK select HAVE_ARM_SMCCC if CPU_V7 select HAVE_CBPF_JIT diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h index 776757d..c83ce56 100644 --- a/arch/arm/include/asm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h @@ -145,6 +145,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, #define TIF_SECCOMP7 /* seccomp syscall filtering active */ #define TIF_NOHZ 12 /* in adaptive nohz mode */ +#define TIF_TASK_ISOLATION 13 /* task isolation active */ #define TIF_USING_IWMMXT 17 #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ #define TIF_RESTORE_SIGMASK20 @@ -158,16 +159,19 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, #define _TIF_SYSCALL_TRACEPOINT(1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT) +#define _TIF_TASK_ISOLATION(1 << TIF_TASK_ISOLATION) /* Checks for any syscall work in entry-common.S */ #define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ - _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP) + _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP | \ + _TIF_TASK_ISOLATION) /* * Change these and you break ASM code in entry-common.S */ #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \ -_TIF_NOTIFY_RESUME | _TIF_UPROBE) +_TIF_NOTIFY_RESUME | _TIF_UPROBE | \ +_TIF_TASK_ISOLATION) #endif /* __KERNEL__ */ #endif /* __ASM_ARM_THREAD_INFO_H */ diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 10c3283..dd8c45b 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -36,7 +36,8 @@ ret_fast_syscall: UNWIND(.cantunwind) disable_irq_notrace @ disable interrupts ldr r1, [tsk, #TI_FLAGS]@ re-check for syscall tracing - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK + ldr r2, =_TIF_SYSCALL_WORK | _TIF_WORK_MASK + tst r1, r2 bne fast_work_pending /* perform architecture specific actions before user return */ @@ -62,7 +63,8 @@ ret_fast_syscall: str r0, [sp, #S_R0 + S_OFF]!@ save returned r0 disable_irq_notrace @ disable interrupts ldr r1, [tsk, #TI_FLAGS]@ re-check for syscall tracing - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK + ldr r2, =_TIF_SYSCALL_WORK | _TIF_WORK_MASK + tst r1, r2 beq no_work_pending UNWIND(.fnend ) ENDPROC(ret_fast_syscall) @@ -70,7 +72,8 @@ ENDPROC(ret_fast_syscall) /* Slower path - fall through to work_pending */ #endif - tst r1, #_TIF_SYSCALL_WORK + ldr r2, =_TIF_SYSCALL_WORK + tst r1, r2 bne __sys_trace_return_nosave slow_work_pending: mov r0, sp @ 'regs' @@ -94,7 +97,8 @@ ret_slow_syscall: disable_irq_notrace @ disable interrupts ENTRY(ret_to_user_from_irq) ldr r1, [tsk, #TI_FLAGS] - tst r1, #_TIF_WORK_MASK + ldr r2, =_TIF_WORK_MASK + tst r1, r2 bne slow_work_pending no_work_pending: asm_trace_hardirqs_on save = 0 @@ -220,7 +224,8 @@