Print this page
OS-4144 panic in lx_freelwp during zone shutdown
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
*** 25,35 ****
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/*
! * Copyright (c) 2013, Joyent, Inc. All rights reserved.
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/sysmacros.h>
--- 25,35 ----
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/*
! * Copyright 2015, Joyent, Inc.
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/sysmacros.h>
*** 155,165 ****
boolean_t in_arg;
int argc = 0;
int error = 0, count = 0;
proc_t *p = ttoproc(curthread);
klwp_t *lwp = ttolwp(curthread);
! int brand_action;
if (args == NULL)
args = "";
alen = strlen(initpath) + 1 + strlen(args) + 1;
--- 155,165 ----
boolean_t in_arg;
int argc = 0;
int error = 0, count = 0;
proc_t *p = ttoproc(curthread);
klwp_t *lwp = ttolwp(curthread);
! int brand_action = EBA_NONE;
if (args == NULL)
args = "";
alen = strlen(initpath) + 1 + strlen(args) + 1;
*** 266,276 ****
* parent process's signal mask. Clear it now so that we behave in
* the same way as when started from the global zone.
*/
sigemptyset(&curthread->t_hold);
! brand_action = ZONE_IS_BRANDED(p->p_zone) ? EBA_BRAND : EBA_NONE;
again:
error = exec_common((const char *)(uintptr_t)exec_fnamep,
(const char **)(uintptr_t)uap, NULL, brand_action);
/*
--- 266,284 ----
* parent process's signal mask. Clear it now so that we behave in
* the same way as when started from the global zone.
*/
sigemptyset(&curthread->t_hold);
! /*
! * Only instruct exec_common to brand the process if necessary. It is
! * possible that the init process is already properly branded due to the
! * proc_exit -> restart_init -> exec_init call chain.
! */
! if (ZONE_IS_BRANDED(p->p_zone) &&
! p->p_brand != p->p_zone->zone_brand) {
! brand_action = EBA_BRAND;
! }
again:
error = exec_common((const char *)(uintptr_t)exec_fnamep,
(const char **)(uintptr_t)uap, NULL, brand_action);
/*