Apply by doing:
	cd /usr/src
	patch -p0 < 031_scarg.patch
And then rebuild your kernel.

Index: sys/kern/sys_generic.c
===================================================================
RCS file: /cvs/src/sys/kern/sys_generic.c,v
retrieving revision 1.29
retrieving revision 1.29.2.1
diff -u -r1.29 -r1.29.2.1
--- sys/kern/sys_generic.c	16 May 2001 12:52:58 -0000	1.29
+++ sys/kern/sys_generic.c	11 Aug 2002 12:54:32 -0000	1.29.2.1
@@ -1,4 +1,4 @@
-/*	$OpenBSD: sys_generic.c,v 1.29 2001/05/16 12:52:58 ho Exp $	*/
+/*	$OpenBSD: sys_generic.c,v 1.29.2.1 2002/08/11 12:54:32 miod Exp $	*/
 /*	$NetBSD: sys_generic.c,v 1.24 1996/03/29 00:25:32 cgd Exp $	*/
 
 /*
@@ -666,12 +666,9 @@
  * Select system call.
  */
 int
-sys_select(p, v, retval)
-	register struct proc *p;
-	void *v;
-	register_t *retval;
+sys_select(struct proc *p, void *v, register_t *retval)
 {
-	register struct sys_select_args /* {
+	struct sys_select_args /* {
 		syscallarg(int) nd;
 		syscallarg(fd_set *) in;
 		syscallarg(fd_set *) ou;
@@ -681,14 +678,15 @@
 	fd_set bits[6], *pibits[3], *pobits[3];
 	struct timeval atv;
 	int s, ncoll, error = 0, timo;
-	u_int ni;
+	u_int nd, ni;
 
-	if (SCARG(uap, nd) > p->p_fd->fd_nfiles) {
+	nd = SCARG(uap, nd);
+	if (nd > p->p_fd->fd_nfiles) {
 		/* forgiving; slightly wrong */
-		SCARG(uap, nd) = p->p_fd->fd_nfiles;
+		nd = p->p_fd->fd_nfiles;
 	}
-	ni = howmany(SCARG(uap, nd), NFDBITS) * sizeof(fd_mask);
-	if (SCARG(uap, nd) > FD_SETSIZE) {
+	ni = howmany(nd, NFDBITS) * sizeof(fd_mask);
+	if (nd > FD_SETSIZE) {
 		caddr_t mbits;
 
 		mbits = malloc(ni * 6, M_TEMP, M_WAITOK);
@@ -735,7 +733,7 @@
 retry:
 	ncoll = nselcoll;
 	p->p_flag |= P_SELECT;
-	error = selscan(p, pibits[0], pobits[0], SCARG(uap, nd), retval);
+	error = selscan(p, pibits[0], pobits[0], nd, retval);
 	if (error || *retval)
 		goto done;
 	if (SCARG(uap, tv)) {
@@ -943,10 +941,7 @@
  * differently.
  */
 int
-sys_poll(p, v, retval)
-	register struct proc *p;
-	void *v;
-	register_t *retval;
+sys_poll(struct proc *p, void *v, register_t *retval)
 {
 	struct sys_poll_args *uap = v;
 	size_t sz;
@@ -955,13 +950,13 @@
 	struct timeval atv;
 	int timo, ncoll, i, s, error, error2;
 	extern int nselcoll, selwait;
+	u_int nfds = SCARG(uap, nfds);
 
 	/* Standards say no more than MAX_OPEN; this is possibly better. */
-	if (SCARG(uap, nfds) > min((int)p->p_rlimit[RLIMIT_NOFILE].rlim_cur, 
-	    maxfiles))
+	if (nfds > min((int)p->p_rlimit[RLIMIT_NOFILE].rlim_cur, maxfiles))
 		return (EINVAL);
 
-	sz = sizeof(struct pollfd) * SCARG(uap, nfds);
+	sz = sizeof(struct pollfd) * nfds;
 	
 	/* optimize for the default case, of a small nfds value */
 	if (sz > sizeof(pfds))
@@ -970,7 +965,7 @@
 	if ((error = copyin(SCARG(uap, fds), pl, sz)) != 0)
 		goto bad;
 
-	for (i = 0; i < SCARG(uap, nfds); i++)
+	for (i = 0; i < nfds; i++)
 		pl[i].revents = 0;
 
 	if (msec != -1) {
@@ -990,7 +985,7 @@
 retry:
 	ncoll = nselcoll;
 	p->p_flag |= P_SELECT;
-	pollscan(p, pl, SCARG(uap, nfds), retval);
+	pollscan(p, pl, nfds, retval);
 	if (*retval)
 		goto done;
 	if (msec != -1) {
