forked from Minki/linux
- Fix UM seccomp vs ptrace, after reordering landed.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 Comment: Kees Cook <kees@outflux.net> iQIcBAABCgAGBQJX0D/IAAoJEIly9N/cbcAmORYQAIzhZ+tFuXkOrEJx0efQx8ik 8ix0wBrh0KTDQkMWQxUnDyIr+7vNcH0oOkH3kwgYaShAZif4oq6TGkdvgJJQr+ca ZsBcEdasYvglcr/7hEF4cH28h3YqN7HwW+Mx8IqrBQqqjly7V2jamBBd/YXOcDK9 gqXooH1He9QVtVb0uC/AVFVY+st37iuqrreLFKWrX52FaUQ+7f0svN4LWC9b1UEq UQyi+HMMRbovum9+2WDKPpl8oEZvXE7CiWexwl2G9qBCpm/AhragArl9BhrA31eE 0PPuVBTtypPNvKVieboXUhTg5eet+nFXtlea+/CLWfbqxpecsNiqMgSIg+aWOnz4 Y6Te5P7oSwhto0WzXvilxjvShvjHgTo98PY9Qj0bBb7ECCbI09GfoDf3SPYayTwC 9zPC04mJihr+6h8QdmYgfuHzTVjMxb6YOmAorz805cJ0vHtdPIP4Gkei4R1tNUkG TNQNXKef/UJbImL17pFu70Ru6/J58OgDuMuAAuswsFt7KELw4DZhmJL+KnYdPG1G gHirQd1HtQlsBoVvQAwmQjBp+TqFoY3oiv4Y2oq7IEk/ZCs3XJaEYKm90CoZlm4a sMtA0j+9rWqNirzuyWUeJfkd48yjcbOzSimzSCTsNVVsbyeA1yyapAdHSTWWm554 zEubN4LCJoGiH/FWnX6U =UgsA -----END PGP SIGNATURE----- Merge tag 'seccomp-v4.8-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux Pull seccomp fixes from Kees Cook: "Fix UM seccomp vs ptrace, after reordering landed" * tag 'seccomp-v4.8-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux: seccomp: Remove 2-phase API documentation um/ptrace: Fix the syscall number update after a ptrace um/ptrace: Fix the syscall_trace_leave call
This commit is contained in:
commit
ab29b33a84
11
arch/Kconfig
11
arch/Kconfig
@ -336,17 +336,6 @@ config HAVE_ARCH_SECCOMP_FILTER
|
||||
results in the system call being skipped immediately.
|
||||
- seccomp syscall wired up
|
||||
|
||||
For best performance, an arch should use seccomp_phase1 and
|
||||
seccomp_phase2 directly. It should call seccomp_phase1 for all
|
||||
syscalls if TIF_SECCOMP is set, but seccomp_phase1 does not
|
||||
need to be called from a ptrace-safe context. It must then
|
||||
call seccomp_phase2 if seccomp_phase1 returns anything other
|
||||
than SECCOMP_PHASE1_OK or SECCOMP_PHASE1_SKIP.
|
||||
|
||||
As an additional optimization, an arch may provide seccomp_data
|
||||
directly to seccomp_phase1; this avoids multiple calls
|
||||
to the syscall_xyz helpers for every syscall.
|
||||
|
||||
config SECCOMP_FILTER
|
||||
def_bool y
|
||||
depends on HAVE_ARCH_SECCOMP_FILTER && SECCOMP && NET
|
||||
|
@ -21,21 +21,17 @@ void handle_syscall(struct uml_pt_regs *r)
|
||||
PT_REGS_SET_SYSCALL_RETURN(regs, -ENOSYS);
|
||||
|
||||
if (syscall_trace_enter(regs))
|
||||
return;
|
||||
goto out;
|
||||
|
||||
/* Do the seccomp check after ptrace; failures should be fast. */
|
||||
if (secure_computing(NULL) == -1)
|
||||
return;
|
||||
goto out;
|
||||
|
||||
/* Update the syscall number after orig_ax has potentially been updated
|
||||
* with ptrace.
|
||||
*/
|
||||
UPT_SYSCALL_NR(r) = PT_SYSCALL_NR(r->gp);
|
||||
syscall = UPT_SYSCALL_NR(r);
|
||||
|
||||
if (syscall >= 0 && syscall <= __NR_syscall_max)
|
||||
PT_REGS_SET_SYSCALL_RETURN(regs,
|
||||
EXECUTE_SYSCALL(syscall, regs));
|
||||
|
||||
out:
|
||||
syscall_trace_leave(regs);
|
||||
}
|
||||
|
@ -84,7 +84,10 @@ int putreg(struct task_struct *child, int regno, unsigned long value)
|
||||
case EAX:
|
||||
case EIP:
|
||||
case UESP:
|
||||
break;
|
||||
case ORIG_EAX:
|
||||
/* Update the syscall number. */
|
||||
UPT_SYSCALL_NR(&child->thread.regs.regs) = value;
|
||||
break;
|
||||
case FS:
|
||||
if (value && (value & 3) != 3)
|
||||
|
@ -78,7 +78,11 @@ int putreg(struct task_struct *child, int regno, unsigned long value)
|
||||
case RSI:
|
||||
case RDI:
|
||||
case RBP:
|
||||
break;
|
||||
|
||||
case ORIG_RAX:
|
||||
/* Update the syscall number. */
|
||||
UPT_SYSCALL_NR(&child->thread.regs.regs) = value;
|
||||
break;
|
||||
|
||||
case FS:
|
||||
|
Loading…
Reference in New Issue
Block a user