Browse Source

MIPS: kernel: scalls: Skip the syscall if denied by the seccomp filter

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Reviewed-by: Paul Burton <paul.burton@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/6399/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Markos Chandras 11 years ago
parent
commit
9d37c405ed

+ 3 - 1
arch/mips/kernel/scall32-o32.S

@@ -120,6 +120,8 @@ syscall_trace_entry:
 	move	a0, sp
 	move	a0, sp
 	jal	syscall_trace_enter
 	jal	syscall_trace_enter
 
 
+	bltz	v0, 2f			# seccomp failed? Skip syscall
+
 	move	t0, s0
 	move	t0, s0
 	RESTORE_STATIC
 	RESTORE_STATIC
 	lw	a0, PT_R4(sp)		# Restore argument registers
 	lw	a0, PT_R4(sp)		# Restore argument registers
@@ -138,7 +140,7 @@ syscall_trace_entry:
 	sw	t1, PT_R0(sp)		# save it for syscall restarting
 	sw	t1, PT_R0(sp)		# save it for syscall restarting
 1:	sw	v0, PT_R2(sp)		# result
 1:	sw	v0, PT_R2(sp)		# result
 
 
-	j	syscall_exit
+2:	j	syscall_exit
 
 
 /* ------------------------------------------------------------------------ */
 /* ------------------------------------------------------------------------ */
 
 

+ 3 - 1
arch/mips/kernel/scall64-64.S

@@ -82,6 +82,8 @@ syscall_trace_entry:
 	move	a0, sp
 	move	a0, sp
 	jal	syscall_trace_enter
 	jal	syscall_trace_enter
 
 
+	bltz	v0, 2f			# seccomp failed? Skip syscall
+
 	move	t0, s0
 	move	t0, s0
 	RESTORE_STATIC
 	RESTORE_STATIC
 	ld	a0, PT_R4(sp)		# Restore argument registers
 	ld	a0, PT_R4(sp)		# Restore argument registers
@@ -102,7 +104,7 @@ syscall_trace_entry:
 	sd	t1, PT_R0(sp)		# save it for syscall restarting
 	sd	t1, PT_R0(sp)		# save it for syscall restarting
 1:	sd	v0, PT_R2(sp)		# result
 1:	sd	v0, PT_R2(sp)		# result
 
 
-	j	syscall_exit
+2:	j	syscall_exit
 
 
 illegal_syscall:
 illegal_syscall:
 	/* This also isn't a 64-bit syscall, throw an error.  */
 	/* This also isn't a 64-bit syscall, throw an error.  */

+ 3 - 1
arch/mips/kernel/scall64-n32.S

@@ -74,6 +74,8 @@ n32_syscall_trace_entry:
 	move	a0, sp
 	move	a0, sp
 	jal	syscall_trace_enter
 	jal	syscall_trace_enter
 
 
+	bltz	v0, 2f			# seccomp failed? Skip syscall
+
 	move	t0, s0
 	move	t0, s0
 	RESTORE_STATIC
 	RESTORE_STATIC
 	ld	a0, PT_R4(sp)		# Restore argument registers
 	ld	a0, PT_R4(sp)		# Restore argument registers
@@ -94,7 +96,7 @@ n32_syscall_trace_entry:
 	sd	t1, PT_R0(sp)		# save it for syscall restarting
 	sd	t1, PT_R0(sp)		# save it for syscall restarting
 1:	sd	v0, PT_R2(sp)		# result
 1:	sd	v0, PT_R2(sp)		# result
 
 
-	j	syscall_exit
+2:	j	syscall_exit
 
 
 not_n32_scall:
 not_n32_scall:
 	/* This is not an n32 compatibility syscall, pass it on to
 	/* This is not an n32 compatibility syscall, pass it on to

+ 3 - 1
arch/mips/kernel/scall64-o32.S

@@ -114,6 +114,8 @@ trace_a_syscall:
 	move	a0, sp
 	move	a0, sp
 	jal	syscall_trace_enter
 	jal	syscall_trace_enter
 
 
+	bltz	v0, 2f			# seccomp failed? Skip syscall
+
 	move	t0, s0
 	move	t0, s0
 	RESTORE_STATIC
 	RESTORE_STATIC
 	ld	a0, PT_R4(sp)		# Restore argument registers
 	ld	a0, PT_R4(sp)		# Restore argument registers
@@ -136,7 +138,7 @@ trace_a_syscall:
 	sd	t1, PT_R0(sp)		# save it for syscall restarting
 	sd	t1, PT_R0(sp)		# save it for syscall restarting
 1:	sd	v0, PT_R2(sp)		# result
 1:	sd	v0, PT_R2(sp)		# result
 
 
-	j	syscall_exit
+2:	j	syscall_exit
 
 
 /* ------------------------------------------------------------------------ */
 /* ------------------------------------------------------------------------ */