diff options
Diffstat (limited to 'usr/src/uts/common/syscall/tasksys.c')
-rw-r--r-- | usr/src/uts/common/syscall/tasksys.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/usr/src/uts/common/syscall/tasksys.c b/usr/src/uts/common/syscall/tasksys.c index bec091e61c..7038a19347 100644 --- a/usr/src/uts/common/syscall/tasksys.c +++ b/usr/src/uts/common/syscall/tasksys.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -124,13 +124,21 @@ tasksys_settaskid(projid_t projid, uint_t flags) 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 (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, - &e, p->p_locked_mem, 0) &RCT_DENY) + &e, p->p_locked_mem, 0) & RCT_DENY) + rctlfail = 1; + + mutex_enter(&(kpj->kpj_data.kpd_crypto_lock)); + if (kpj->kpj_data.kpd_crypto_mem + p->p_crypto_mem > + kpj->kpj_data.kpd_crypto_mem_ctl) + if (rctl_test_entity(rc_project_crypto_mem, kpj->kpj_rctls, p, + &e, p->p_crypto_mem, 0) & RCT_DENY) rctlfail = 1; if (rctlfail) { + mutex_exit(&(kpj->kpj_data.kpd_crypto_lock)); mutex_exit(&zone->zone_mem_lock); mutex_exit(&zone->zone_nlwps_lock); if (curthread != p->p_agenttp) @@ -138,11 +146,16 @@ tasksys_settaskid(projid_t projid, uint_t flags) mutex_exit(&p->p_lock); return (set_errno(EAGAIN)); } + kpj->kpj_data.kpd_crypto_mem += p->p_crypto_mem; + mutex_exit(&(kpj->kpj_data.kpd_crypto_lock)); kpj->kpj_data.kpd_locked_mem += p->p_locked_mem; kpj->kpj_nlwps += p->p_lwpcnt; kpj->kpj_ntasks++; 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; mutex_exit(&zone->zone_mem_lock); |