diff options
author | Andriy Gapon <avg@FreeBSD.org> | 2019-12-11 15:52:29 +0000 |
---|---|---|
committer | Andriy Gapon <avg@FreeBSD.org> | 2019-12-11 15:52:29 +0000 |
commit | 64ebbdd54d9c79c3b5ce1c7d9efb3bb11ff59fb7 (patch) | |
tree | f4c5f5ed952f4310a8781282ef280ae3646c875d /sys/kern/kern_syscalls.c | |
parent | c590fd27dedb241f59497865b1dcd8770b0d95f6 (diff) | |
download | src-64ebbdd54d9c79c3b5ce1c7d9efb3bb11ff59fb7.tar.gz src-64ebbdd54d9c79c3b5ce1c7d9efb3bb11ff59fb7.zip |
add a sanity check to the system call registration code
A system call number should be at least reserved.
We do not expect an attempt to register a fixed number system call
when nothing at all is known about it.
MFC after: 3 weeks
Sponsored by: Panzura
Notes
Notes:
svn path=/head/; revision=355611
Diffstat (limited to 'sys/kern/kern_syscalls.c')
-rw-r--r-- | sys/kern/kern_syscalls.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/kern/kern_syscalls.c b/sys/kern/kern_syscalls.c index 035e169bbe0e..53884fedcbeb 100644 --- a/sys/kern/kern_syscalls.c +++ b/sys/kern/kern_syscalls.c @@ -120,11 +120,14 @@ kern_syscall_register(struct sysent *sysents, int *offset, if (i == SYS_MAXSYSCALL) return (ENFILE); *offset = i; - } else if (*offset < 0 || *offset >= SYS_MAXSYSCALL) + } else if (*offset < 0 || *offset >= SYS_MAXSYSCALL) { return (EINVAL); - else if (sysents[*offset].sy_call != (sy_call_t *)lkmnosys && - sysents[*offset].sy_call != (sy_call_t *)lkmressys) + } else if (sysents[*offset].sy_call != (sy_call_t *)lkmnosys && + sysents[*offset].sy_call != (sy_call_t *)lkmressys) { + KASSERT(sysents[*offset].sy_call != NULL, + ("undefined syscall %d", *offset)); return (EEXIST); + } KASSERT(sysents[*offset].sy_thrcnt == SY_THR_ABSENT, ("dynamic syscall is not protected")); |