From ff19e029e81c950f4e0f40f1f1ee1f7d8f8d8041 Mon Sep 17 00:00:00 2001 From: Menno Lageman Date: Tue, 29 Jun 2010 02:03:28 -0700 Subject: PSARC 2009/042 max-processes rctl 6631612 non-global zone can overrun the process table of the system 6466380 Project resource set callbacks are needlessly called on every fork() 6516818 task resource callbacks are needlessly called on every fork() --- usr/src/uts/common/syscall/tasksys.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'usr/src/uts/common/syscall/tasksys.c') diff --git a/usr/src/uts/common/syscall/tasksys.c b/usr/src/uts/common/syscall/tasksys.c index 7038a19347..bbaaba9f5d 100644 --- a/usr/src/uts/common/syscall/tasksys.c +++ b/usr/src/uts/common/syscall/tasksys.c @@ -19,12 +19,9 @@ * CDDL HEADER END */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. */ -#pragma ident "%Z%%M% %I% %E% SMI" - /* * System calls for creating and inquiring about tasks and projects @@ -124,6 +121,11 @@ tasksys_settaskid(projid_t projid, uint_t flags) 1, 0) & RCT_DENY) rctlfail = 1; + if (kpj != proj0p && kpj->kpj_nprocs + 1 > kpj->kpj_nprocs_ctl) + if (rctl_test_entity(rc_project_nprocs, kpj->kpj_rctls, p, &e, + 1, 0) & RCT_DENY) + rctlfail = 1; + if (kpj->kpj_data.kpd_locked_mem + p->p_locked_mem > kpj->kpj_data.kpd_locked_mem_ctl) if (rctl_test_entity(rc_project_locked_mem, kpj->kpj_rctls, p, @@ -151,12 +153,14 @@ tasksys_settaskid(projid_t projid, uint_t flags) kpj->kpj_data.kpd_locked_mem += p->p_locked_mem; kpj->kpj_nlwps += p->p_lwpcnt; kpj->kpj_ntasks++; + kpj->kpj_nprocs++; oldpj->kpj_data.kpd_locked_mem -= p->p_locked_mem; mutex_enter(&(oldpj->kpj_data.kpd_crypto_lock)); oldpj->kpj_data.kpd_crypto_mem -= p->p_crypto_mem; mutex_exit(&(oldpj->kpj_data.kpd_crypto_lock)); oldpj->kpj_nlwps -= p->p_lwpcnt; + oldpj->kpj_nprocs--; mutex_exit(&zone->zone_mem_lock); mutex_exit(&zone->zone_nlwps_lock); -- cgit v1.2.3