From bb5ca623d9cfae0efb343eed949af6d1a9163207 Mon Sep 17 00:00:00 2001 From: Vamsi Nagineni Date: Fri, 20 Mar 2009 04:32:37 -0700 Subject: 6810086 panic in rctl_incr_swap() due to freed up proc structure 6557272 assertion failed: zone->zone_max_swap >= swap, panic during dism stress test --- usr/src/uts/common/os/rctl.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'usr/src/uts/common/os/rctl.c') diff --git a/usr/src/uts/common/os/rctl.c b/usr/src/uts/common/os/rctl.c index 41da98ee02..dee5330bca 100644 --- a/usr/src/uts/common/os/rctl.c +++ b/usr/src/uts/common/os/rctl.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -2908,6 +2908,13 @@ rctl_incr_locked_mem(proc_t *p, kproject_t *proj, rctl_qty_t inc, e.rcep_p.proj = projp; e.rcep_t = RCENTITY_PROJECT; + + /* check for overflow */ + if ((projp->kpj_data.kpd_locked_mem + inc) < + projp->kpj_data.kpd_locked_mem) { + ret = EAGAIN; + goto out; + } if (projp->kpj_data.kpd_locked_mem + inc > projp->kpj_data.kpd_locked_mem_ctl) { if (rctl_test_entity(rc_project_locked_mem, projp->kpj_rctls, @@ -2918,6 +2925,12 @@ rctl_incr_locked_mem(proc_t *p, kproject_t *proj, rctl_qty_t inc, } e.rcep_p.zone = zonep; e.rcep_t = RCENTITY_ZONE; + + /* Check for overflow */ + if ((zonep->zone_locked_mem + inc) < zonep->zone_locked_mem) { + ret = EAGAIN; + goto out; + } if (zonep->zone_locked_mem + inc > zonep->zone_locked_mem_ctl) { if (rctl_test_entity(rc_zone_locked_mem, zonep->zone_rctls, p, &e, inc, 0) & RCT_DENY) { @@ -3003,6 +3016,11 @@ rctl_incr_swap(proc_t *proc, zone_t *zone, size_t swap) mutex_enter(&zone->zone_mem_lock); + /* Check for overflow */ + if ((zone->zone_max_swap + swap) < zone->zone_max_swap) { + mutex_exit(&zone->zone_mem_lock); + return (EAGAIN); + } if ((zone->zone_max_swap + swap) > zone->zone_max_swap_ctl) { -- cgit v1.2.3