cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

syscall.c (1390B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
      4 */
      5
      6#include <linux/kernel.h>
      7#include <linux/ptrace.h>
      8#include <linux/seccomp.h>
      9#include <kern_util.h>
     10#include <sysdep/ptrace.h>
     11#include <sysdep/ptrace_user.h>
     12#include <sysdep/syscalls.h>
     13#include <linux/time-internal.h>
     14#include <asm/unistd.h>
     15
     16void handle_syscall(struct uml_pt_regs *r)
     17{
     18	struct pt_regs *regs = container_of(r, struct pt_regs, regs);
     19	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();
     31
     32	/* Initialize the syscall number and default return value. */
     33	UPT_SYSCALL_NR(r) = PT_SYSCALL_NR(r->gp);
     34	PT_REGS_SET_SYSCALL_RETURN(regs, -ENOSYS);
     35
     36	if (syscall_trace_enter(regs))
     37		goto out;
     38
     39	/* Do the seccomp check after ptrace; failures should be fast. */
     40	if (secure_computing() == -1)
     41		goto out;
     42
     43	syscall = UPT_SYSCALL_NR(r);
     44	if (syscall >= 0 && syscall < __NR_syscalls)
     45		PT_REGS_SET_SYSCALL_RETURN(regs,
     46				EXECUTE_SYSCALL(syscall, regs));
     47
     48out:
     49	syscall_trace_leave(regs);
     50}