Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Dec 2019 15:52:30 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r355611 - head/sys/kern
Message-ID:  <201912111552.xBBFqUq9009116@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Wed Dec 11 15:52:29 2019
New Revision: 355611
URL: https://svnweb.freebsd.org/changeset/base/355611

Log:
  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

Modified:
  head/sys/kern/kern_syscalls.c

Modified: head/sys/kern/kern_syscalls.c
==============================================================================
--- head/sys/kern/kern_syscalls.c	Wed Dec 11 15:15:21 2019	(r355610)
+++ head/sys/kern/kern_syscalls.c	Wed Dec 11 15:52:29 2019	(r355611)
@@ -120,11 +120,14 @@ kern_syscall_register(struct sysent *sysents, int *off
 		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"));



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912111552.xBBFqUq9009116>