--- select.c.0	Mon Jan 31 08:48:52 2000
+++ select.c	Mon Jan 31 10:30:09 2000
@@ -414,11 +414,13 @@
 		wait = wait_table;
 	}
 
-	fds = (struct pollfd **)kmalloc(
-		(1 + (nfds - 1) / POLLFD_PER_PAGE) * sizeof(struct pollfd *),
-		GFP_KERNEL);
-	if (fds == NULL)
-		goto out;
+	if (nfds != 0) {
+		fds = (struct pollfd **)kmalloc(
+			(1 + (nfds - 1) / POLLFD_PER_PAGE) * sizeof(struct pollfd *),
+			GFP_KERNEL);
+		if (fds == NULL)
+			goto out;
+	}
 
 	nchunks = 0;
 	nleft = nfds;
@@ -439,11 +441,9 @@
 	for (i=0; i < nchunks; i++)
 		if (copy_from_user(fds[i], ufds + i*POLLFD_PER_PAGE, PAGE_SIZE))
 			goto out_fds1;
-	if (nleft) {
-		if (copy_from_user(fds[nchunks], ufds + nchunks*POLLFD_PER_PAGE, 
+	if (nleft && copy_from_user(fds[nchunks], ufds + nchunks*POLLFD_PER_PAGE, 
 				nleft * sizeof(struct pollfd)))
-			goto out_fds1;
-	}
+		goto out_fds1;
 
 	lock_kernel();
 	fdcount = do_poll(nfds, nchunks, nleft, fds, wait, timeout);
@@ -467,7 +467,8 @@
 out_fds:
 	for (i=0; i < nchunks; i++)
 		free_page((unsigned long)(fds[i]));
-	kfree(fds);
+	if (nfds != 0)
+		kfree(fds);
 out:
 	if (wait)
 		free_wait(wait_table);
