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) \