Module Name:    src
Committed By:   christos
Date:           Mon Jan 10 22:26:14 UTC 2022

Modified Files:
        src/sys/miscfs/procfs: procfs_vnops.c

Log Message:
Fix locking in the error path (from RVP). Centralize unlock code.


To generate a diff of this commit:
cvs rdiff -u -r1.220 -r1.221 src/sys/miscfs/procfs/procfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/miscfs/procfs/procfs_vnops.c
diff -u src/sys/miscfs/procfs/procfs_vnops.c:1.220 src/sys/miscfs/procfs/procfs_vnops.c:1.221
--- src/sys/miscfs/procfs/procfs_vnops.c:1.220	Wed Dec  8 15:11:54 2021
+++ src/sys/miscfs/procfs/procfs_vnops.c	Mon Jan 10 17:26:14 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: procfs_vnops.c,v 1.220 2021/12/08 20:11:54 andvar Exp $	*/
+/*	$NetBSD: procfs_vnops.c,v 1.221 2022/01/10 22:26:14 christos Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc.
@@ -105,7 +105,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.220 2021/12/08 20:11:54 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.221 2022/01/10 22:26:14 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -1399,10 +1399,8 @@ procfs_readdir(void *v)
 				*cookies++ = i + 1;
 			nc++;
 		}
-		if (error) {
-			ncookies = nc;
-			break;
-		}
+		if (error)
+			goto out;
 		for (; uio->uio_resid >= UIO_MX && i < nfd; i++) {
 			/* check the descriptor exists */
 			if ((fp = fd_getfile2(p, i - 2)) == NULL)
@@ -1419,9 +1417,7 @@ procfs_readdir(void *v)
 				*cookies++ = i + 1;
 			nc++;
 		}
-		ncookies = nc;
-		procfs_proc_unlock(p);
-		break;
+		goto out;
 	}
 	case PFStask: {
 		struct proc *p;
@@ -1453,10 +1449,8 @@ procfs_readdir(void *v)
 				*cookies++ = i + 1;
 			nc++;
 		}
-		if (error) {
-			ncookies = nc;
-			break;
-		}
+		if (error)
+			goto out;
 		for (; uio->uio_resid >= UIO_MX && i < nfd; i++) {
 			/* check the descriptor exists */
 			d.d_fileno = PROCFS_FILENO(pfs->pfs_pid, PFStask,
@@ -1470,9 +1464,7 @@ procfs_readdir(void *v)
 				*cookies++ = i + 1;
 			nc++;
 		}
-		ncookies = nc;
-		procfs_proc_unlock(p);
-		break;
+		goto out;
 	}
 
 	/*
@@ -1575,7 +1567,7 @@ procfs_readdir(void *v)
 			if (cookies)
 				*cookies++ = i + 1;
 		}
-
+out:
 		ncookies = nc;
 		procfs_proc_unlock(p);
 		break;

Reply via email to