summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/syscall/tasksys.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/syscall/tasksys.c')
-rw-r--r--usr/src/uts/common/syscall/tasksys.c21
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);