usr/src/uts/common/sys/exec.h
author Casper H.S. Dik <Casper.Dik@Sun.COM>
Wed, 28 Apr 2010 10:01:37 +0200
changeset 12273 63678502e95e
parent 11798 1e7f1f154004
permissions -rw-r--r--
PSARC 2009/377 In-kernel pfexec implementation. PSARC 2009/378 Basic File Privileges PSARC 2010/072 RBAC update: user attrs from profiles 4912090 pfzsh(1) should exist 4912093 pfbash(1) should exist 4912096 pftcsh(1) should exist 6440298 Expand the basic privilege set in order to restrict file access 6859862 Move pfexec into the kernel 6919171 cred_t sidesteps kmem_debug; we need to be able to detect bad hold/free when they occur 6923721 The new SYS_SMB privilege is not backward compatible 6937562 autofs doesn't remove its door when the zone shuts down 6937727 Zones stuck on deathrow; netstack_zone keeps a credential reference to the zone 6940159 Implement PSARC 2010/072
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
1335
99d6f0945b8f 6361644 Differences in SUID scripts between S9 and S10
casper
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
99d6f0945b8f 6361644 Differences in SUID scripts between S9 and S10
casper
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
7838
cfb39999d184 PSARC 2008/622 32-bit Address Restriction Software Capabilities Flag
Roger A. Faulkner <Roger.Faulkner@Sun.COM>
parents: 6229
diff changeset
    21
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 11798
diff changeset
    23
 * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
/*	  All Rights Reserved  	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#ifndef _SYS_EXEC_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#define	_SYS_EXEC_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#include <sys/systm.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#include <vm/seg.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <vm/seg_vn.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <sys/model.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/uio.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <sys/corectl.h>
4440
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
    38
#include <sys/machelf.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * Number of bytes to read for magic string
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
#define	MAGIC_BYTES	8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
#define	getexmag(x)	(((x)[0] << 8) + (x)[1])
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
typedef struct execa {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
	const char *fname;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
	const char **argp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
	const char **envp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
} execa_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
typedef struct execenv {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
	caddr_t ex_bssbase;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
	caddr_t ex_brkbase;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
	size_t	ex_brksize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
	vnode_t *ex_vp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
	short   ex_magic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
} execenv_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
#define	LOADABLE_EXEC(e)	((e)->exec_lock)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
#define	LOADED_EXEC(e)		((e)->exec_func)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
 * User argument structure for passing exec information around between the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
 * common and machine-dependent portions of exec and the exec modules.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
typedef struct uarg {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	ssize_t	na;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	ssize_t	ne;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	ssize_t	nc;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	ssize_t arglen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
	char	*fname;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	char	*pathname;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
	ssize_t	auxsize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
	caddr_t	stackend;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
	size_t	stk_align;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
	size_t	stk_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
	char	*stk_base;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
	char	*stk_strp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	int	*stk_offp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	size_t	usrstack_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
	uint_t	stk_prot;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
	uint_t	dat_prot;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	int	traceinval;
7838
cfb39999d184 PSARC 2008/622 32-bit Address Restriction Software Capabilities Flag
Roger A. Faulkner <Roger.Faulkner@Sun.COM>
parents: 6229
diff changeset
    93
	int	addr32;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
	model_t	to_model;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	model_t	from_model;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	size_t	to_ptrsize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	size_t	from_ptrsize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	size_t	ncargs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	struct execsw *execswp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	uintptr_t entry;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	uintptr_t thrptr;
4528
9ad45715d2ab PSARC 2006/266 Shared Context Support
paulsan
parents: 4440
diff changeset
   102
	vnode_t	*ex_vp;
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   103
	char	*emulator;
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   104
	char	*brandname;
6229
d95cc752da23 6568447 bcp is broken by 6551627
edp
parents: 4642
diff changeset
   105
	char	*auxp_auxflags; /* addr of auxflags auxv on the user stack */
4642
d7554fc0577a 6572719 ld.so on sparc and amd64 should be brand aware
sl108498
parents: 4528
diff changeset
   106
	char	*auxp_brand; /* address of first brand auxv on user stack */
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 11798
diff changeset
   107
	cred_t	*pfcred;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 11798
diff changeset
   108
	boolean_t scrubenv;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
} uarg_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
/*
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   112
 * Possible brand actions for exec.
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   113
 */
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   114
#define	EBA_NONE	0
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   115
#define	EBA_NATIVE	1
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   116
#define	EBA_BRAND	2
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   117
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   118
/*
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
 * The following macro is a machine dependent encapsulation of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
 * postfix processing to hide the stack direction from elf.c
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
 * thereby making the elf.c code machine independent.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
#define	execpoststack(ARGS, ARRAYADDR, BYTESIZE) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
	(copyout((caddr_t)(ARRAYADDR), (ARGS)->stackend, (BYTESIZE)) ? EFAULT \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
		: (((ARGS)->stackend += (BYTESIZE)), 0))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
 * This provides the current user stack address for an object of size BYTESIZE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
 * Used to determine the stack address just before applying execpoststack().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
#define	stackaddress(ARGS, BYTESIZE)	((ARGS)->stackend)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
 * Macro to add attribute/values the aux vector under construction.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
/* BEGIN CSTYLED */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
#if ((_LONG_ALIGNMENT == (2 * _INT_ALIGNMENT)) || \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
     (_POINTER_ALIGNMENT == (2 * _INT_ALIGNMENT)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
/* END CSTYLED */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
 * This convoluted stuff is necessitated by the fact that there is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
 * potential padding in the aux vector, but not necessarily and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
 * without clearing the padding there is a small, but potential
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
 * security hole.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
#define	ADDAUX(p, a, v)	{		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
		(&(p)->a_type)[1] = 0;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
		(p)->a_type = (a);	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
		(p)->a_un.a_val = (v);	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
		++(p);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
#else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
#define	ADDAUX(p, a, v)	{			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
		(p)->a_type = (a);		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
		((p)++)->a_un.a_val = (v);	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
#define	INTPSZ	MAXPATHLEN
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
typedef struct intpdata {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
	char	*intp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	char	*intp_name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
	char	*intp_arg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
} intpdata_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
1335
99d6f0945b8f 6361644 Differences in SUID scripts between S9 and S10
casper
parents: 0
diff changeset
   166
#define	EXECSETID_SETID		0x1 /* setid exec */
99d6f0945b8f 6361644 Differences in SUID scripts between S9 and S10
casper
parents: 0
diff changeset
   167
#define	EXECSETID_UGIDS		0x2 /* [ug]ids mismatch */
99d6f0945b8f 6361644 Differences in SUID scripts between S9 and S10
casper
parents: 0
diff changeset
   168
#define	EXECSETID_PRIVS		0x4 /* more privs than before */
99d6f0945b8f 6361644 Differences in SUID scripts between S9 and S10
casper
parents: 0
diff changeset
   169
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
struct execsw {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
	char	*exec_magic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
	int	exec_magoff;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
	int	exec_maglen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
	int	(*exec_func)(struct vnode *vp, struct execa *uap,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
		    struct uarg *args, struct intpdata *idata, int level,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
		    long *execsz, int setid, caddr_t exec_file,
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   177
		    struct cred *cred, int brand_action);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	int	(*exec_core)(struct vnode *vp, struct proc *p,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
		    struct cred *cred, rlim64_t rlimit, int sig,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
		    core_content_t content);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	krwlock_t	*exec_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
9694
78fafb281255 6795209 Enable compilation of ON-consolidation with GCC 4.2
Scott Rotondo <Scott.Rotondo@Sun.COM>
parents: 9521
diff changeset
   184
extern int nexectype;		/* number of elements in execsw */
78fafb281255 6795209 Enable compilation of ON-consolidation with GCC 4.2
Scott Rotondo <Scott.Rotondo@Sun.COM>
parents: 9521
diff changeset
   185
extern struct execsw execsw[];
78fafb281255 6795209 Enable compilation of ON-consolidation with GCC 4.2
Scott Rotondo <Scott.Rotondo@Sun.COM>
parents: 9521
diff changeset
   186
extern kmutex_t execsw_lock;
78fafb281255 6795209 Enable compilation of ON-consolidation with GCC 4.2
Scott Rotondo <Scott.Rotondo@Sun.COM>
parents: 9521
diff changeset
   187
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
extern short elfmagic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
extern short intpmagic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
extern short javamagic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
#if defined(__sparc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
extern short aout_zmagic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
extern short aout_nmagic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
extern short aout_omagic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
extern short nomagic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
extern char elf32magicstr[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
extern char elf64magicstr[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
extern char intpmagicstr[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
extern char javamagicstr[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
#if defined(__sparc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
extern char aout_nmagicstr[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
extern char aout_zmagicstr[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
extern char aout_omagicstr[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
extern char nomagicstr[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
extern int exec_args(execa_t *, uarg_t *, intpdata_t *, void **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
extern int exece(const char *fname, const char **argp, const char **envp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
extern int exec_common(const char *fname, const char **argp,
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   212
    const char **envp, int brand_action);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
extern int gexec(vnode_t **vp, struct execa *uap, struct uarg *args,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
    struct intpdata *idata, int level, long *execsz, caddr_t exec_file,
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 1335
diff changeset
   215
    struct cred *cred, int brand_action);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
extern struct execsw *allocate_execsw(char *name, char *magic,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
    size_t magic_size);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
extern struct execsw *findexecsw(char *magic);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
extern struct execsw *findexec_by_hdr(char *header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
extern struct execsw *findexec_by_magic(char *magic);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
extern int execpermissions(struct vnode *vp, struct vattr *vattrp,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
    struct uarg *args);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
extern int execmap(vnode_t *vp, caddr_t addr, size_t len, size_t zfodlen,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
    off_t offset, int prot, int page, uint_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
extern void setexecenv(struct execenv *ep);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
extern int execopen(struct vnode **vpp, int *fdp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
extern int execclose(int fd);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
extern void setregs(uarg_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
extern void exec_set_sp(size_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
/*
4440
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   232
 * Utility functions for branded process executing
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   233
 */
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   234
#if !defined(_ELF32_COMPAT)
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   235
/*
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   236
 * When compiling 64-bit kernels we don't want these definitions included
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   237
 * when compiling the 32-bit compatability elf code in the elfexec module.
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   238
 */
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   239
extern int elfexec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   240
    long *, int, caddr_t, cred_t *, int);
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   241
extern int mapexec_brand(vnode_t *, uarg_t *, Ehdr *, Addr *,
4642
d7554fc0577a 6572719 ld.so on sparc and amd64 should be brand aware
sl108498
parents: 4528
diff changeset
   242
    intptr_t *, caddr_t, int *, caddr_t *, caddr_t *, size_t *, uintptr_t *);
4440
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   243
#endif /* !_ELF32_COMPAT */
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   244
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   245
#if defined(_LP64)
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   246
extern int elf32exec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   247
    long *, int, caddr_t, cred_t *, int);
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   248
extern int mapexec32_brand(vnode_t *, uarg_t *, Elf32_Ehdr *, Elf32_Addr *,
4642
d7554fc0577a 6572719 ld.so on sparc and amd64 should be brand aware
sl108498
parents: 4528
diff changeset
   249
    intptr_t *, caddr_t, int *, caddr_t *, caddr_t *, size_t *, uintptr_t *);
d7554fc0577a 6572719 ld.so on sparc and amd64 should be brand aware
sl108498
parents: 4528
diff changeset
   250
#endif  /* _LP64 */
4440
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   251
566ce8b5e131 6562537 brandz elfexec support code assumes 32-bit elf binaries
edp
parents: 2991
diff changeset
   252
/*
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
 * Utility functions for exec module core routines:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
extern int core_seg(proc_t *, vnode_t *, offset_t, caddr_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
    size_t, rlim64_t, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
extern int core_write(vnode_t *, enum uio_seg, offset_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
    const void *, size_t, rlim64_t, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
/* a.out stuff */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
struct exec;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
extern caddr_t gettmem(struct exec *exp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
extern caddr_t getdmem(struct exec *exp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
extern ulong_t getdfile(struct exec *exp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
extern uint_t gettfile(struct exec *exp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
extern int chkaout(struct exdata *exp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
extern void getexinfo(struct exdata *edp_in, struct exdata *edp_out,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
    int *pagetext, int *pagedata);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
#endif	/* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
#endif /* _SYS_EXEC_H */