hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/arch/um/kernel/skas/syscall.c
....@@ -1,6 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
23 * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3
- * Licensed under the GPL
44 */
55
66 #include <linux/kernel.h>
....@@ -10,11 +10,24 @@
1010 #include <sysdep/ptrace.h>
1111 #include <sysdep/ptrace_user.h>
1212 #include <sysdep/syscalls.h>
13
+#include <linux/time-internal.h>
14
+#include <asm/unistd.h>
1315
1416 void handle_syscall(struct uml_pt_regs *r)
1517 {
1618 struct pt_regs *regs = container_of(r, struct pt_regs, regs);
1719 int syscall;
20
+
21
+ /*
22
+ * If we have infinite CPU resources, then make every syscall also a
23
+ * preemption point, since we don't have any other preemption in this
24
+ * case, and kernel threads would basically never run until userspace
25
+ * went to sleep, even if said userspace interacts with the kernel in
26
+ * various ways.
27
+ */
28
+ if (time_travel_mode == TT_MODE_INFCPU ||
29
+ time_travel_mode == TT_MODE_EXTERNAL)
30
+ schedule();
1831
1932 /* Initialize the syscall number and default return value. */
2033 UPT_SYSCALL_NR(r) = PT_SYSCALL_NR(r->gp);
....@@ -24,7 +37,7 @@
2437 goto out;
2538
2639 /* Do the seccomp check after ptrace; failures should be fast. */
27
- if (secure_computing(NULL) == -1)
40
+ if (secure_computing() == -1)
2841 goto out;
2942
3043 syscall = UPT_SYSCALL_NR(r);