Home | History | Annotate | Download | only in kern
History log of /src/sys/kern/sys_syscall.c
RevisionDateAuthorComments
 1.16  01-Jun-2025  bad update comment about where this file is included

sys_indirect.c is long gone. however sys_scdebug.c includes this file.
 1.15  29-Jun-2022  hannken branches: 1.15.10;
Synchronize SYS_SYSCALL() with other syscall implementations and
call trace_exit() even if trace_enter() returned an error.

PR kern/52166 "syscallemu does not work on sparc (32-bit)"
PR toolchain/56117 "New test failures on amd64 since switch to gcc10"
 1.14  14-Mar-2022  riastradh syscall(2): Provide better attribution for biglock slippage.

This adds a small overhead to the syscall path, but only when invoked
via the syscall(2) syscall, for which stack traces generally don't
print the actual syscall number in question so the better attribution
may make a difference.
 1.13  08-Feb-2020  maxv Retire KLEAK.

KLEAK was a nice feature and served its purpose; it allowed us to detect
dozens of info leaks on the kernel->userland boundary, and thanks to it we
tackled a good part of the infoleak problem 1.5 years ago.

Nowadays however, we have kMSan, which can detect uninitialized memory in
the kernel. kMSan supersedes KLEAK: it can detect what KLEAK was able to
detect, but in addition, (1) it operates in all of the kernel and not just
the kernel->userland boundary, (2) it requires no user interaction, and (3)
it is deterministic and not statistical.

That makes kMSan the feature of choice to detect info leaks nowadays;
people interested in detecting info leaks should boot a kMSan kernel and
just wait for the magic to happen.

KLEAK was a good ride, and a fun project, but now is time for it to go.

Discussed with several people, including Thomas Barabosch.
 1.12  02-Dec-2018  maxv branches: 1.12.6;
Introduce KLEAK, a new feature that can detect kernel information leaks.

It works by tainting memory sources with marker values, letting the data
travel through the kernel, and scanning the kernel<->user frontier for
these marker values. Combined with compiler instrumentation and rotation
of the markers, it is able to yield relevant results with little effort.

We taint the pools and the stack, and scan copyout/copyoutstr. KLEAK is
supported on amd64 only for now, but it is not complicated to add more
architectures (just a matter of having the address of .text, and a stack
unwinder).

A userland tool is provided, that allows to execute a command in rounds
and monitor the leaks generated all the while.

KLEAK already detected directly 12 kernel info leaks, and prompted changes
that in total fixed 25+ leaks.

Based on an idea developed jointly with Thomas Barabosch (of Fraunhofer
FKIE).
 1.11  07-Mar-2015  christos branches: 1.11.16; 1.11.18;
regen
 1.10  05-May-2012  christos branches: 1.10.2; 1.10.16;
use sy_call() so that l->l_sysent gets set, so that we can autoload modules
that define new syscalls properly.
 1.9  29-Apr-2008  martin branches: 1.9.34; 1.9.38;
Convert to new 2 clause license
 1.8  06-Feb-2008  dsl branches: 1.8.6; 1.8.8; 1.8.10;
Remove the 'args' parameter to 'trace_exit()' it is no longer used.
Instead of passing the (un)real system call code and syscall table pointer,
just pass the number of arguments - which is what ktrace really wants.
Ride forthcoming 4.99.53
 1.7  05-Jan-2008  dsl branches: 1.7.2;
Don't pass 'curlwp' into trace_enter() and trace_exit().
 1.6  31-Dec-2007  ad Remove systrace. Ok core@.
 1.5  22-Dec-2007  dsl Further constification of the syscall args buffer.
It will get __UNCONST() applied in the systrace code if/when systrace tries
to change the arguments. This sucks since the syscall args might be in
the trap frame, and the syscall might return ERESTART so the restarted call
would use the wrong arguments.
OTOH systrace() (as a security measure) is almost impossible to implement
for a threaded app (validated filenames can be changed before namei() reads
them into memory).
The current code is just plain broken for threaded apps - data that needs
to be lwp-specified is proc-specific.
I believe ad is planning to nuke systrace ...
 1.4  22-Dec-2007  dsl Add a few buckets of 'const' and 'static' to the system call trace code.
sys_trace() still needs to be able to update the syscall args.
 1.3  20-Dec-2007  dsl Convert all the system call entry points from:
int foo(struct lwp *l, void *v, register_t *retval)
to:
int foo(struct lwp *l, const struct foo_args *uap, register_t *retval)
Fixup compat code to not write into 'uap' and (in some cases) to actually
pass a correctly formatted 'uap' structure with the right name to the
next routine.
A few 'compat' routines that just call standard ones have been deleted.
All the 'compat' code compiles (along with the kernels required to test
build it).
98% done by automated scripts.
 1.2  11-Dec-2007  lukem use __KERNEL_RCSID() instead of __RCSID()
 1.1  09-Nov-2007  dsl branches: 1.1.2; 1.1.4; 1.1.6; 1.1.8; 1.1.10; 1.1.12; 1.1.14;
Add MI implementations of the indirect stystem call functions sys_syscall()
and sys___syscall().
These functions are only used if the MI system call entry code doesn't
special-case the relevant entries.
 1.1.14.3  08-Jan-2008  bouyer Sync with HEAD
 1.1.14.2  02-Jan-2008  bouyer Sync with HEAD
 1.1.14.1  13-Dec-2007  bouyer Sync with HEAD
 1.1.12.1  11-Dec-2007  yamt sync with head.
 1.1.10.1  26-Dec-2007  ad Sync with head.
 1.1.8.4  18-Feb-2008  mjf Sync with HEAD.
 1.1.8.3  27-Dec-2007  mjf Sync with HEAD.
 1.1.8.2  19-Nov-2007  mjf Sync with HEAD.
 1.1.8.1  09-Nov-2007  mjf file sys_syscall.c was added on branch mjf-devfs on 2007-11-19 00:48:54 +0000
 1.1.6.4  11-Feb-2008  yamt sync with head.
 1.1.6.3  21-Jan-2008  yamt sync with head
 1.1.6.2  15-Nov-2007  yamt sync with head.
 1.1.6.1  09-Nov-2007  yamt file sys_syscall.c was added on branch yamt-lazymbuf on 2007-11-15 11:44:52 +0000
 1.1.4.2  13-Nov-2007  bouyer Sync with HEAD
 1.1.4.1  09-Nov-2007  bouyer file sys_syscall.c was added on branch bouyer-xenamd64 on 2007-11-13 16:02:28 +0000
 1.1.2.2  11-Nov-2007  joerg Sync with HEAD.
 1.1.2.1  09-Nov-2007  joerg file sys_syscall.c was added on branch jmcneill-pm on 2007-11-11 16:48:13 +0000
 1.7.2.3  23-Mar-2008  matt sync with HEAD
 1.7.2.2  09-Jan-2008  matt sync with HEAD
 1.7.2.1  05-Jan-2008  matt file sys_syscall.c was added on branch matt-armv6 on 2008-01-09 01:56:23 +0000
 1.8.10.1  16-May-2008  yamt sync with head.
 1.8.8.1  18-May-2008  yamt sync with head.
 1.8.6.1  02-Jun-2008  mjf Sync with HEAD.
 1.9.38.1  02-Jun-2012  mrg sync to latest -current.
 1.9.34.1  23-May-2012  yamt sync with head.
 1.10.16.1  06-Apr-2015  skrll Sync with HEAD
 1.10.2.1  03-Dec-2017  jdolecek update from HEAD
 1.11.18.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.11.18.1  10-Jun-2019  christos Sync with HEAD
 1.11.16.1  26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.12.6.1  29-Feb-2020  ad Sync with head.
 1.15.10.1  02-Aug-2025  perseant Sync with HEAD

RSS XML Feed