--- procps-3.2.7/proc/readproc.c.kzak	2006-06-16 10:18:13.000000000 +0200
+++ procps-3.2.7/proc/readproc.c	2006-09-27 11:25:13.000000000 +0200
@@ -432,14 +432,17 @@
     if(fd==-1) return NULL;
 
     /* read whole file into a memory buffer, allocating as we go */
-    while ((n = read(fd, buf, sizeof buf - 1)) > 0) {
+    while ((n = read(fd, buf, sizeof buf - 1)) >= 0) {
 	if (n < (int)(sizeof buf - 1))
 	    end_of_file = 1;
-	if (n == 0 && rbuf == 0)
+	if (n == 0 && rbuf == 0) {
+	    close(fd);
 	    return NULL;	/* process died between our open and read */
+	}
 	if (n < 0) {
 	    if (rbuf)
 		free(rbuf);
+	    close(fd);
 	    return NULL;	/* read error */
 	}
 	if (end_of_file && buf[n-1])		/* last read char not null */
