Module Name:    src
Committed By:   martin
Date:           Wed Aug 17 16:43:01 UTC 2022

Modified Files:
        src/sys/kern [netbsd-9]: uipc_sem.c

Log Message:
Pull up following revision(s) (requested by chs in ticket #1501):

        sys/kern/uipc_sem.c: revision 1.60

when updating the per-uid "semcnt", decrement the counter for the uid
that created the ksem, not the uid of the process freeing the ksem.
fixes PR 55509.


To generate a diff of this commit:
cvs rdiff -u -r1.55.4.2 -r1.55.4.3 src/sys/kern/uipc_sem.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/kern/uipc_sem.c
diff -u src/sys/kern/uipc_sem.c:1.55.4.2 src/sys/kern/uipc_sem.c:1.55.4.3
--- src/sys/kern/uipc_sem.c:1.55.4.2	Tue May  5 20:12:37 2020
+++ src/sys/kern/uipc_sem.c	Wed Aug 17 16:43:01 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_sem.c,v 1.55.4.2 2020/05/05 20:12:37 martin Exp $	*/
+/*	$NetBSD: uipc_sem.c,v 1.55.4.3 2022/08/17 16:43:01 martin Exp $	*/
 
 /*-
  * Copyright (c) 2011, 2019 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_sem.c,v 1.55.4.2 2020/05/05 20:12:37 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_sem.c,v 1.55.4.3 2022/08/17 16:43:01 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -470,8 +470,6 @@ ksem_create(lwp_t *l, const char *name, 
 		len = 0;
 	}
 
-	chgsemcnt(kauth_cred_getuid(l->l_cred), 1);
-
 	ks = kmem_zalloc(sizeof(ksem_t), KM_SLEEP);
 	mutex_init(&ks->ks_lock, MUTEX_DEFAULT, IPL_NONE);
 	cv_init(&ks->ks_cv, "psem");
@@ -484,8 +482,9 @@ ksem_create(lwp_t *l, const char *name, 
 	uc = l->l_cred;
 	ks->ks_uid = kauth_cred_geteuid(uc);
 	ks->ks_gid = kauth_cred_getegid(uc);
-
+	chgsemcnt(ks->ks_uid, 1);
 	atomic_inc_uint(&nsems_total);
+
 	*ksret = ks;
 	return 0;
 }
@@ -496,6 +495,9 @@ ksem_free(ksem_t *ks)
 
 	KASSERT(!cv_has_waiters(&ks->ks_cv));
 
+	chgsemcnt(ks->ks_uid, -1);
+	atomic_dec_uint(&nsems_total);
+
 	if (ks->ks_pshared_id) {
 		KASSERT(ks->ks_pshared_proc == NULL);
 		ksem_remove_pshared(ks);
@@ -507,9 +509,6 @@ ksem_free(ksem_t *ks)
 	mutex_destroy(&ks->ks_lock);
 	cv_destroy(&ks->ks_cv);
 	kmem_free(ks, sizeof(ksem_t));
-
-	atomic_dec_uint(&nsems_total);
-	chgsemcnt(kauth_cred_getuid(curproc->p_cred), -1);
 }
 
 #define	KSEM_ID_IS_PSHARED(id)		\

Reply via email to