summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1995-11-06 12:52:37 +0000
committerdg <dg@FreeBSD.org>1995-11-06 12:52:37 +0000
commitb0e92e3fe4280bcb3c077c4b792fd4b49023a90e (patch)
treeb1085bc2d506b9f9ebbc0763719203202ce8d6a6 /sys
parent70e33173922ad4e39017ab578a3fe083ecc6b794 (diff)
downloadFreeBSD-src-b0e92e3fe4280bcb3c077c4b792fd4b49023a90e.zip
FreeBSD-src-b0e92e3fe4280bcb3c077c4b792fd4b49023a90e.tar.gz
All:
Changed vnodep -> vp for consistency with the rest of the kernel, and changed iparams -> imgp for brevity. kern_exec.c: Explicitly initialized some additional parts of the image_params struct to avoid bzeroing it. Rewrote the set-id code to reduce the number of logical tests. The rewrite exposed a mostly benign bug in the algorithm: traced set-id images would get ktracing disabled even if the set-id didn't happen for other reasons.
Diffstat (limited to 'sys')
-rw-r--r--sys/compat/linux/linux_misc.c40
-rw-r--r--sys/i386/ibcs2/imgact_coff.c66
-rw-r--r--sys/i386/linux/imgact_linux.c34
-rw-r--r--sys/i386/linux/linux_misc.c40
-rw-r--r--sys/i386/linux/linux_sysent.c8
-rw-r--r--sys/kern/imgact_aout.c30
-rw-r--r--sys/kern/imgact_gzip.c12
-rw-r--r--sys/kern/imgact_shell.c30
-rw-r--r--sys/kern/kern_exec.c210
-rw-r--r--sys/sys/imgact.h4
10 files changed, 239 insertions, 235 deletions
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index a9f7e0b..89ab5d8 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: linux_misc.c,v 1.1 1995/06/25 17:32:37 sos Exp $
+ * $Id: linux_misc.c,v 1.2 1995/10/04 07:08:04 julian Exp $
*/
#include <i386/linux/linux.h>
@@ -162,7 +162,7 @@ int
linux_uselib(struct proc *p, struct linux_uselib_args *args, int *retval)
{
struct nameidata ni;
- struct vnode *vnodep;
+ struct vnode *vp;
struct exec *a_out = 0;
struct vattr attr;
unsigned long vmaddr, virtual_offset, file_offset;
@@ -192,46 +192,46 @@ linux_uselib(struct proc *p, struct linux_uselib_args *args, int *retval)
if (error = namei(&ni))
return error;
- vnodep = ni.ni_vp;
- if (vnodep == NULL)
+ vp = ni.ni_vp;
+ if (vp == NULL)
return ENOEXEC;
- if (vnodep->v_writecount) {
- VOP_UNLOCK(vnodep);
+ if (vp->v_writecount) {
+ VOP_UNLOCK(vp);
return ETXTBSY;
}
- if (error = VOP_GETATTR(vnodep, &attr, p->p_ucred, p)) {
- VOP_UNLOCK(vnodep);
+ if (error = VOP_GETATTR(vp, &attr, p->p_ucred, p)) {
+ VOP_UNLOCK(vp);
return error;
}
- if ((vnodep->v_mount->mnt_flag & MNT_NOEXEC)
+ if ((vp->v_mount->mnt_flag & MNT_NOEXEC)
|| ((attr.va_mode & 0111) == 0)
|| (attr.va_type != VREG)) {
- VOP_UNLOCK(vnodep);
+ VOP_UNLOCK(vp);
return ENOEXEC;
}
if (attr.va_size == 0) {
- VOP_UNLOCK(vnodep);
+ VOP_UNLOCK(vp);
return ENOEXEC;
}
- if (error = VOP_ACCESS(vnodep, VEXEC, p->p_ucred, p)) {
- VOP_UNLOCK(vnodep);
+ if (error = VOP_ACCESS(vp, VEXEC, p->p_ucred, p)) {
+ VOP_UNLOCK(vp);
return error;
}
- if (error = VOP_OPEN(vnodep, FREAD, p->p_ucred, p)) {
- VOP_UNLOCK(vnodep);
+ if (error = VOP_OPEN(vp, FREAD, p->p_ucred, p)) {
+ VOP_UNLOCK(vp);
return error;
}
- VOP_UNLOCK(vnodep); /* lock no longer needed */
+ VOP_UNLOCK(vp); /* lock no longer needed */
error = vm_mmap(kernel_map, (vm_offset_t *)&a_out, 1024,
- VM_PROT_READ, VM_PROT_READ, 0, (caddr_t)vnodep, 0);
+ VM_PROT_READ, VM_PROT_READ, 0, (caddr_t)vp, 0);
if (error)
return (error);
@@ -257,7 +257,7 @@ linux_uselib(struct proc *p, struct linux_uselib_args *args, int *retval)
return ENOEXEC;
}
- vnodep->v_flag |= VTEXT;
+ vp->v_flag |= VTEXT;
bss_size = round_page(a_out->a_bss);
/*
* Check if file_offset page aligned,.
@@ -280,7 +280,7 @@ printf("uselib: Non page aligned binary %d\n", file_offset);
error = vm_mmap(kernel_map, &buffer,
round_page(a_out->a_text + a_out->a_data + file_offset),
VM_PROT_READ, VM_PROT_READ, MAP_FILE,
- (caddr_t)vnodep, trunc_page(file_offset));
+ (caddr_t)vp, trunc_page(file_offset));
if (error)
return error;
@@ -306,7 +306,7 @@ printf("uselib: Page aligned binary %d\n", file_offset);
error = vm_mmap(&p->p_vmspace->vm_map, &vmaddr,
a_out->a_text + a_out->a_data,
VM_PROT_ALL, VM_PROT_ALL, MAP_PRIVATE | MAP_FIXED,
- (caddr_t)vnodep, file_offset);
+ (caddr_t)vp, file_offset);
if (error)
return (error);
}
diff --git a/sys/i386/ibcs2/imgact_coff.c b/sys/i386/ibcs2/imgact_coff.c
index 31c8ecf..170c2fa 100644
--- a/sys/i386/ibcs2/imgact_coff.c
+++ b/sys/i386/ibcs2/imgact_coff.c
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: imgact_coff.c,v 1.7 1995/09/13 02:12:51 sef Exp $
+ * $Id: imgact_coff.c,v 1.9 1995/10/10 17:33:19 swallace Exp $
*/
#include <sys/param.h>
@@ -49,7 +49,7 @@
extern struct sysentvec ibcs2_svr3_sysvec;
extern int coff_load_file __P((struct proc *p, char *name));
-extern int exec_coff_imgact __P((struct image_params *iparams));
+extern int exec_coff_imgact __P((struct image_params *imgp));
static int load_coff_section __P((struct vmspace *vmspace, struct vnode *vp, vm_offset_t offset, caddr_t vmaddr, size_t memsz, size_t filsz, vm_prot_t prot));
@@ -154,7 +154,7 @@ coff_load_file(struct proc *p, char *name)
struct vmspace *vmspace = p->p_vmspace;
int error;
struct nameidata nd;
- struct vnode *vnodep;
+ struct vnode *vp;
struct vattr attr;
struct filehdr *fhdr;
struct aouthdr *ahdr;
@@ -173,19 +173,19 @@ coff_load_file(struct proc *p, char *name)
if (error)
return error;
- vnodep = nd.ni_vp;
- if (vnodep == NULL)
+ vp = nd.ni_vp;
+ if (vp == NULL)
return ENOEXEC;
- if (vnodep->v_writecount) {
+ if (vp->v_writecount) {
error = ETXTBSY;
goto fail;
}
- if (error = VOP_GETATTR(vnodep, &attr, p->p_ucred, p))
+ if (error = VOP_GETATTR(vp, &attr, p->p_ucred, p))
goto fail;
- if ((vnodep->v_mount->mnt_flag & MNT_NOEXEC)
+ if ((vp->v_mount->mnt_flag & MNT_NOEXEC)
|| ((attr.va_mode & 0111) == 0)
|| (attr.va_type != VREG))
goto fail;
@@ -195,17 +195,17 @@ coff_load_file(struct proc *p, char *name)
goto fail;
}
- if (error = VOP_ACCESS(vnodep, VEXEC, p->p_ucred, p))
+ if (error = VOP_ACCESS(vp, VEXEC, p->p_ucred, p))
goto fail;
- if (error = VOP_OPEN(vnodep, FREAD, p->p_ucred, p))
+ if (error = VOP_OPEN(vp, FREAD, p->p_ucred, p))
goto fail;
/*
* Lose the lock on the vnode. It's no longer needed, and must not
* exist for the pagefault paging to work below.
*/
- VOP_UNLOCK(vnodep);
+ VOP_UNLOCK(vp);
if (error = vm_mmap(kernel_map,
(vm_offset_t *) &ptr,
@@ -213,7 +213,7 @@ coff_load_file(struct proc *p, char *name)
VM_PROT_READ,
VM_PROT_READ,
MAP_FILE,
- (caddr_t) vnodep,
+ (caddr_t) vp,
0))
goto fail;
@@ -256,13 +256,13 @@ coff_load_file(struct proc *p, char *name)
}
}
- if (error = load_coff_section(vmspace, vnodep, text_offset,
+ if (error = load_coff_section(vmspace, vp, text_offset,
(caddr_t)text_address,
text_size, text_size,
VM_PROT_READ | VM_PROT_EXECUTE)) {
goto dealloc_and_fail;
}
- if (error = load_coff_section(vmspace, vnodep, data_offset,
+ if (error = load_coff_section(vmspace, vp, data_offset,
(caddr_t)data_address,
data_size + bss_size, data_size,
VM_PROT_ALL)) {
@@ -284,14 +284,14 @@ coff_load_file(struct proc *p, char *name)
}
int
-exec_coff_imgact(iparams)
- struct image_params *iparams;
+exec_coff_imgact(imgp)
+ struct image_params *imgp;
{
- struct filehdr *fhdr = (struct filehdr*)iparams->image_header;
+ struct filehdr *fhdr = (struct filehdr*)imgp->image_header;
struct aouthdr *ahdr;
struct scnhdr *scns;
int i;
- struct vmspace *vmspace = iparams->proc->p_vmspace;
+ struct vmspace *vmspace = imgp->proc->p_vmspace;
unsigned long vmaddr;
int nscns;
int error, len;
@@ -323,20 +323,20 @@ exec_coff_imgact(iparams)
return -1;
}
- ahdr = (struct aouthdr*)((char*)(iparams->image_header) +
+ ahdr = (struct aouthdr*)((char*)(imgp->image_header) +
sizeof(struct filehdr));
- iparams->entry_addr = ahdr->entry;
+ imgp->entry_addr = ahdr->entry;
- scns = (struct scnhdr*)((char*)(iparams->image_header) +
+ scns = (struct scnhdr*)((char*)(imgp->image_header) +
sizeof(struct filehdr) +
sizeof(struct aouthdr));
- if (error = exec_extract_strings(iparams)) {
+ if (error = exec_extract_strings(imgp)) {
DPRINTF(("%s(%d): return %d\n", __FILE__, __LINE__, error));
return error;
}
- exec_new_vmspace(iparams);
+ exec_new_vmspace(imgp);
for (i = 0; i < nscns; i++) {
@@ -375,7 +375,7 @@ exec_coff_imgact(iparams)
VM_PROT_READ,
VM_PROT_READ,
MAP_FILE,
- (caddr_t) iparams->vnodep,
+ (caddr_t) imgp->vp,
foff)) {
return ENOEXEC;
}
@@ -396,9 +396,9 @@ exec_coff_imgact(iparams)
DPRINTF(("%s(%d): shared library %s\n",
__FILE__, __LINE__, libname));
strcpy(&libbuf[emul_path_len], libname);
- error = coff_load_file(iparams->proc, libbuf);
+ error = coff_load_file(imgp->proc, libbuf);
if (error)
- error = coff_load_file(iparams->proc,
+ error = coff_load_file(imgp->proc,
libname);
if (error)
break;
@@ -418,10 +418,10 @@ exec_coff_imgact(iparams)
*/
DPRINTF(("%s(%d): load_coff_section(vmspace, "
- "iparams->vnodep, %08lx, %08lx, 0x%x, 0x%x, 0x%x)\n",
+ "imgp->vp, %08lx, %08lx, 0x%x, 0x%x, 0x%x)\n",
__FILE__, __LINE__, text_offset, text_address,
text_size, text_size, VM_PROT_READ | VM_PROT_EXECUTE));
- if (error = load_coff_section(vmspace, iparams->vnodep,
+ if (error = load_coff_section(vmspace, imgp->vp,
text_offset, (caddr_t)text_address,
text_size, text_size,
VM_PROT_READ | VM_PROT_EXECUTE)) {
@@ -434,10 +434,10 @@ exec_coff_imgact(iparams)
DPRINTF(("%s(%d): load_coff_section(vmspace, "
- "iparams->vnodep, 0x%08lx, 0x%08lx, 0x%x, 0x%x, 0x%x)\n",
+ "imgp->vp, 0x%08lx, 0x%08lx, 0x%x, 0x%x, 0x%x)\n",
__FILE__, __LINE__, data_offset, data_address,
data_size + bss_size, data_size, VM_PROT_ALL));
- if (error = load_coff_section(vmspace, iparams->vnodep,
+ if (error = load_coff_section(vmspace, imgp->vp,
data_offset, (caddr_t)data_address,
data_size + bss_size, data_size,
VM_PROT_ALL)) {
@@ -446,8 +446,8 @@ exec_coff_imgact(iparams)
return error;
}
- iparams->interpreted = 0;
- iparams->proc->p_sysent = &ibcs2_svr3_sysvec;
+ imgp->interpreted = 0;
+ imgp->proc->p_sysent = &ibcs2_svr3_sysvec;
vmspace->vm_tsize = round_page(text_size) >> PAGE_SHIFT;
vmspace->vm_dsize = round_page(data_size + bss_size) >> PAGE_SHIFT;
@@ -470,7 +470,7 @@ exec_coff_imgact(iparams)
DPRINTF(("%s(%d): returning successfully!\n", __FILE__, __LINE__));
/* Indicate that this file should not be modified */
- iparams->vnodep->v_flag |= VTEXT;
+ imgp->vp->v_flag |= VTEXT;
return 0;
}
diff --git a/sys/i386/linux/imgact_linux.c b/sys/i386/linux/imgact_linux.c
index 276e8ce..24a4a47 100644
--- a/sys/i386/linux/imgact_linux.c
+++ b/sys/i386/linux/imgact_linux.c
@@ -28,7 +28,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: imgact_linux.c,v 1.1 1995/06/25 17:32:32 sos Exp $
+ * $Id: imgact_linux.c,v 1.2 1995/08/24 10:32:27 davidg Exp $
*/
#include <sys/param.h>
@@ -45,11 +45,11 @@
#include <vm/vm_kern.h>
int
-exec_linux_imgact(iparams)
- struct image_params *iparams;
+exec_linux_imgact(imgp)
+ struct image_params *imgp;
{
- struct exec *a_out = (struct exec *) iparams->image_header;
- struct vmspace *vmspace = iparams->proc->p_vmspace;
+ struct exec *a_out = (struct exec *) imgp->image_header;
+ struct vmspace *vmspace = imgp->proc->p_vmspace;
unsigned long vmaddr, virtual_offset, file_offset;
unsigned long buffer, bss_size;
int error;
@@ -84,24 +84,24 @@ exec_linux_imgact(iparams)
return (-1);
/* text + data can't exceed file size */
- if (a_out->a_data + a_out->a_text > iparams->attr->va_size)
+ if (a_out->a_data + a_out->a_text > imgp->attr->va_size)
return (EFAULT);
/*
* text/data/bss must not exceed limits
*/
if (a_out->a_text > MAXTSIZ || a_out->a_data + bss_size > MAXDSIZ ||
- a_out->a_data+bss_size > iparams->proc->p_rlimit[RLIMIT_DATA].rlim_cur)
+ a_out->a_data+bss_size > imgp->proc->p_rlimit[RLIMIT_DATA].rlim_cur)
return (ENOMEM);
/* copy in arguments and/or environment from old process */
- error = exec_extract_strings(iparams);
+ error = exec_extract_strings(imgp);
if (error)
return (error);
/*
* Destroy old process VM and create a new one (with a new stack)
*/
- exec_new_vmspace(iparams);
+ exec_new_vmspace(imgp);
/*
* Check if file_offset page aligned,.
@@ -124,7 +124,7 @@ exec_linux_imgact(iparams)
error = vm_mmap(kernel_map, &buffer,
round_page(a_out->a_text + file_offset),
VM_PROT_READ, VM_PROT_READ, MAP_FILE,
- (caddr_t) iparams->vnodep, trunc_page(file_offset));
+ (caddr_t) imgp->vp, trunc_page(file_offset));
if (error)
return error;
@@ -153,7 +153,7 @@ exec_linux_imgact(iparams)
error = vm_mmap(kernel_map, &buffer,
round_page(a_out->a_data + file_offset),
VM_PROT_READ, VM_PROT_READ, MAP_FILE,
- (caddr_t) iparams->vnodep,
+ (caddr_t) imgp->vp,
trunc_page(a_out->a_text + file_offset));
if (error)
return error;
@@ -185,7 +185,7 @@ exec_linux_imgact(iparams)
VM_PROT_READ | VM_PROT_EXECUTE,
VM_PROT_READ | VM_PROT_EXECUTE | VM_PROT_WRITE,
MAP_PRIVATE | MAP_FIXED,
- (caddr_t)iparams->vnodep, file_offset);
+ (caddr_t)imgp->vp, file_offset);
if (error)
return (error);
@@ -196,7 +196,7 @@ exec_linux_imgact(iparams)
error = vm_mmap(&vmspace->vm_map, &vmaddr, a_out->a_data,
VM_PROT_READ | VM_PROT_WRITE,
VM_PROT_ALL, MAP_PRIVATE | MAP_FIXED,
- (caddr_t)iparams->vnodep, file_offset + a_out->a_text);
+ (caddr_t)imgp->vp, file_offset + a_out->a_text);
if (error)
return (error);
@@ -211,7 +211,7 @@ exec_linux_imgact(iparams)
return (error);
}
/* Indicate that this file should not be modified */
- iparams->vnodep->v_flag |= VTEXT;
+ imgp->vp->v_flag |= VTEXT;
}
/* Fill in process VM information */
vmspace->vm_tsize = round_page(a_out->a_text) >> PAGE_SHIFT;
@@ -220,10 +220,10 @@ exec_linux_imgact(iparams)
vmspace->vm_daddr = (caddr_t)virtual_offset + a_out->a_text;
/* Fill in image_params */
- iparams->interpreted = 0;
- iparams->entry_addr = a_out->a_entry;
+ imgp->interpreted = 0;
+ imgp->entry_addr = a_out->a_entry;
- iparams->proc->p_sysent = &linux_sysvec;
+ imgp->proc->p_sysent = &linux_sysvec;
return (0);
}
diff --git a/sys/i386/linux/linux_misc.c b/sys/i386/linux/linux_misc.c
index a9f7e0b..89ab5d8 100644
--- a/sys/i386/linux/linux_misc.c
+++ b/sys/i386/linux/linux_misc.c
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: linux_misc.c,v 1.1 1995/06/25 17:32:37 sos Exp $
+ * $Id: linux_misc.c,v 1.2 1995/10/04 07:08:04 julian Exp $
*/
#include <i386/linux/linux.h>
@@ -162,7 +162,7 @@ int
linux_uselib(struct proc *p, struct linux_uselib_args *args, int *retval)
{
struct nameidata ni;
- struct vnode *vnodep;
+ struct vnode *vp;
struct exec *a_out = 0;
struct vattr attr;
unsigned long vmaddr, virtual_offset, file_offset;
@@ -192,46 +192,46 @@ linux_uselib(struct proc *p, struct linux_uselib_args *args, int *retval)
if (error = namei(&ni))
return error;
- vnodep = ni.ni_vp;
- if (vnodep == NULL)
+ vp = ni.ni_vp;
+ if (vp == NULL)
return ENOEXEC;
- if (vnodep->v_writecount) {
- VOP_UNLOCK(vnodep);
+ if (vp->v_writecount) {
+ VOP_UNLOCK(vp);
return ETXTBSY;
}
- if (error = VOP_GETATTR(vnodep, &attr, p->p_ucred, p)) {
- VOP_UNLOCK(vnodep);
+ if (error = VOP_GETATTR(vp, &attr, p->p_ucred, p)) {
+ VOP_UNLOCK(vp);
return error;
}
- if ((vnodep->v_mount->mnt_flag & MNT_NOEXEC)
+ if ((vp->v_mount->mnt_flag & MNT_NOEXEC)
|| ((attr.va_mode & 0111) == 0)
|| (attr.va_type != VREG)) {
- VOP_UNLOCK(vnodep);
+ VOP_UNLOCK(vp);
return ENOEXEC;
}
if (attr.va_size == 0) {
- VOP_UNLOCK(vnodep);
+ VOP_UNLOCK(vp);
return ENOEXEC;
}
- if (error = VOP_ACCESS(vnodep, VEXEC, p->p_ucred, p)) {
- VOP_UNLOCK(vnodep);
+ if (error = VOP_ACCESS(vp, VEXEC, p->p_ucred, p)) {
+ VOP_UNLOCK(vp);
return error;
}
- if (error = VOP_OPEN(vnodep, FREAD, p->p_ucred, p)) {
- VOP_UNLOCK(vnodep);
+ if (error = VOP_OPEN(vp, FREAD, p->p_ucred, p)) {
+ VOP_UNLOCK(vp);
return error;
}
- VOP_UNLOCK(vnodep); /* lock no longer needed */
+ VOP_UNLOCK(vp); /* lock no longer needed */
error = vm_mmap(kernel_map, (vm_offset_t *)&a_out, 1024,
- VM_PROT_READ, VM_PROT_READ, 0, (caddr_t)vnodep, 0);
+ VM_PROT_READ, VM_PROT_READ, 0, (caddr_t)vp, 0);
if (error)
return (error);
@@ -257,7 +257,7 @@ linux_uselib(struct proc *p, struct linux_uselib_args *args, int *retval)
return ENOEXEC;
}
- vnodep->v_flag |= VTEXT;
+ vp->v_flag |= VTEXT;
bss_size = round_page(a_out->a_bss);
/*
* Check if file_offset page aligned,.
@@ -280,7 +280,7 @@ printf("uselib: Non page aligned binary %d\n", file_offset);
error = vm_mmap(kernel_map, &buffer,
round_page(a_out->a_text + a_out->a_data + file_offset),
VM_PROT_READ, VM_PROT_READ, MAP_FILE,
- (caddr_t)vnodep, trunc_page(file_offset));
+ (caddr_t)vp, trunc_page(file_offset));
if (error)
return error;
@@ -306,7 +306,7 @@ printf("uselib: Page aligned binary %d\n", file_offset);
error = vm_mmap(&p->p_vmspace->vm_map, &vmaddr,
a_out->a_text + a_out->a_data,
VM_PROT_ALL, VM_PROT_ALL, MAP_PRIVATE | MAP_FIXED,
- (caddr_t)vnodep, file_offset);
+ (caddr_t)vp, file_offset);
if (error)
return (error);
}
diff --git a/sys/i386/linux/linux_sysent.c b/sys/i386/linux/linux_sysent.c
index 015d49a..83cc044 100644
--- a/sys/i386/linux/linux_sysent.c
+++ b/sys/i386/linux/linux_sysent.c
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: linux_sysent.c,v 1.3 1995/06/08 13:50:52 sos Exp $
+ * $Id: linux_sysent.c,v 1.1 1995/06/25 17:32:43 sos Exp $
*/
#include <i386/linux/linux.h>
@@ -341,18 +341,18 @@ int linux_to_bsd_signal[LINUX_NSIG] = {
SIGXCPU, SIGXFSZ, SIGVTALRM, SIGPROF, SIGWINCH, SIGURG, SIGURG, 0
};
-int linux_fixup(int **stack_base, struct image_params *iparams)
+int linux_fixup(int **stack_base, struct image_params *imgp)
{
int *argv, *envp;
argv = *stack_base;
- envp = *stack_base + (iparams->argc + 1);
+ envp = *stack_base + (imgp->argc + 1);
(*stack_base)--;
**stack_base = (int)envp;
(*stack_base)--;
**stack_base = (int)argv;
(*stack_base)--;
- **stack_base = (int)iparams->argc;
+ **stack_base = (int)imgp->argc;
}
struct sysentvec linux_sysvec = {
diff --git a/sys/kern/imgact_aout.c b/sys/kern/imgact_aout.c
index edf7c56..920952f 100644
--- a/sys/kern/imgact_aout.c
+++ b/sys/kern/imgact_aout.c
@@ -28,7 +28,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: imgact_aout.c,v 1.15 1995/08/24 10:32:36 davidg Exp $
+ * $Id: imgact_aout.c,v 1.16 1995/09/08 13:24:32 davidg Exp $
*/
#include <sys/param.h>
@@ -44,11 +44,11 @@
#include <vm/vm.h>
int
-exec_aout_imgact(iparams)
- struct image_params *iparams;
+exec_aout_imgact(imgp)
+ struct image_params *imgp;
{
- struct exec *a_out = (struct exec *) iparams->image_header;
- struct vmspace *vmspace = iparams->proc->p_vmspace;
+ struct exec *a_out = (struct exec *) imgp->image_header;
+ struct vmspace *vmspace = imgp->proc->p_vmspace;
unsigned long vmaddr, virtual_offset, file_offset;
unsigned long bss_size;
int error;
@@ -111,7 +111,7 @@ exec_aout_imgact(iparams)
return (-1);
/* text + data can't exceed file size */
- if (a_out->a_data + a_out->a_text > iparams->attr->va_size)
+ if (a_out->a_data + a_out->a_text > imgp->attr->va_size)
return (EFAULT);
/*
@@ -125,18 +125,18 @@ exec_aout_imgact(iparams)
/* data + bss can't exceed rlimit */
a_out->a_data + bss_size >
- iparams->proc->p_rlimit[RLIMIT_DATA].rlim_cur)
+ imgp->proc->p_rlimit[RLIMIT_DATA].rlim_cur)
return (ENOMEM);
/* copy in arguments and/or environment from old process */
- error = exec_extract_strings(iparams);
+ error = exec_extract_strings(imgp);
if (error)
return (error);
/*
* Destroy old process VM and create a new one (with a new stack)
*/
- exec_new_vmspace(iparams);
+ exec_new_vmspace(imgp);
/*
* Map text read/execute
@@ -149,7 +149,7 @@ exec_aout_imgact(iparams)
VM_PROT_READ | VM_PROT_EXECUTE, /* protection */
VM_PROT_READ | VM_PROT_EXECUTE | VM_PROT_WRITE, /* max protection */
MAP_PRIVATE | MAP_FIXED, /* flags */
- (caddr_t)iparams->vnodep, /* vnode */
+ (caddr_t)imgp->vp, /* vnode */
file_offset); /* offset */
if (error)
return (error);
@@ -165,7 +165,7 @@ exec_aout_imgact(iparams)
a_out->a_data,
VM_PROT_READ | VM_PROT_WRITE | (a_out->a_text ? 0 : VM_PROT_EXECUTE),
VM_PROT_ALL, MAP_PRIVATE | MAP_FIXED,
- (caddr_t) iparams->vnodep,
+ (caddr_t) imgp->vp,
file_offset + a_out->a_text);
if (error)
return (error);
@@ -189,13 +189,13 @@ exec_aout_imgact(iparams)
vmspace->vm_daddr = (caddr_t) virtual_offset + a_out->a_text;
/* Fill in image_params */
- iparams->interpreted = 0;
- iparams->entry_addr = a_out->a_entry;
+ imgp->interpreted = 0;
+ imgp->entry_addr = a_out->a_entry;
- iparams->proc->p_sysent = &aout_sysvec;
+ imgp->proc->p_sysent = &aout_sysvec;
/* Indicate that this file should not be modified */
- iparams->vnodep->v_flag |= VTEXT;
+ imgp->vp->v_flag |= VTEXT;
return (0);
}
diff --git a/sys/kern/imgact_gzip.c b/sys/kern/imgact_gzip.c
index 1fb4c92..7fba9b9 100644
--- a/sys/kern/imgact_gzip.c
+++ b/sys/kern/imgact_gzip.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: imgact_gzip.c,v 1.13 1995/03/16 18:12:27 bde Exp $
+ * $Id: imgact_gzip.c,v 1.14 1995/05/30 08:05:18 rgrimes Exp $
*
* This module handles execution of a.out files which have been run through
* "gzip". This saves diskspace, but wastes cpu-cycles and VM.
@@ -53,11 +53,11 @@ static int do_aout_hdr __P((struct imgact_gzip *));
static int Flush __P((void *vp, u_char *, u_long siz));
int
-exec_gzip_imgact(iparams)
- struct image_params *iparams;
+exec_gzip_imgact(imgp)
+ struct image_params *imgp;
{
int error, error2 = 0;
- u_char *p = (u_char *) iparams->image_header;
+ u_char *p = (u_char *) imgp->image_header;
struct imgact_gzip igz;
struct inflate infl;
@@ -88,7 +88,7 @@ exec_gzip_imgact(iparams)
infl.gz_input = NextByte;
infl.gz_output = Flush;
- igz.ip = iparams;
+ igz.ip = imgp;
igz.idx = 10;
if (p[3] & 0x08) { /* skip a filename */
@@ -299,7 +299,7 @@ NextByte(void *vp)
VM_PROT_READ, /* protection */
VM_PROT_READ, /* max protection */
0, /* flags */
- (caddr_t) igz->ip->vnodep, /* vnode */
+ (caddr_t) igz->ip->vp, /* vnode */
igz->offset); /* offset */
if (error) {
igz->where = __LINE__;
diff --git a/sys/kern/imgact_shell.c b/sys/kern/imgact_shell.c
index e1f4ba0..59c95fe 100644
--- a/sys/kern/imgact_shell.c
+++ b/sys/kern/imgact_shell.c
@@ -28,7 +28,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: imgact_shell.c,v 1.7 1995/09/08 13:24:33 davidg Exp $
+ * $Id: imgact_shell.c,v 1.8 1995/10/08 00:05:58 swallace Exp $
*/
#include <sys/param.h>
@@ -50,13 +50,13 @@
/*
* Shell interpreter image activator. A interpreter name beginning
- * at iparams->stringbase is the minimal successful exit requirement.
+ * at imgp->stringbase is the minimal successful exit requirement.
*/
int
-exec_shell_imgact(iparams)
- struct image_params *iparams;
+exec_shell_imgact(imgp)
+ struct image_params *imgp;
{
- const char *image_header = iparams->image_header;
+ const char *image_header = imgp->image_header;
const char *ihp, *line_endp;
char *interp;
@@ -68,10 +68,10 @@ exec_shell_imgact(iparams)
* Don't allow a shell script to be the shell for a shell
* script. :-)
*/
- if (iparams->interpreted)
+ if (imgp->interpreted)
return(ENOEXEC);
- iparams->interpreted = 1;
+ imgp->interpreted = 1;
/*
* Copy shell name and arguments from image_header into string
@@ -94,13 +94,13 @@ exec_shell_imgact(iparams)
while ((*ihp == ' ') || (*ihp == '\t')) ihp++;
/* copy the interpreter name */
- interp = iparams->interpreter_name;
+ interp = imgp->interpreter_name;
while ((ihp < line_endp) && (*ihp != ' ') && (*ihp != '\t'))
*interp++ = *ihp++;
*interp = '\0';
/* Disallow a null interpreter filename */
- if (*iparams->interpreter_name == '\0')
+ if (*imgp->interpreter_name == '\0')
return(ENOEXEC);
/* reset for another pass */
@@ -118,19 +118,19 @@ exec_shell_imgact(iparams)
* and the maximum shell command length is tiny.
*/
while ((ihp < line_endp) && (*ihp != ' ') && (*ihp != '\t')) {
- *iparams->stringp++ = *ihp++;
- iparams->stringspace--;
+ *imgp->stringp++ = *ihp++;
+ imgp->stringspace--;
}
- *iparams->stringp++ = 0;
- iparams->stringspace--;
+ *imgp->stringp++ = 0;
+ imgp->stringspace--;
- iparams->argc++;
+ imgp->argc++;
}
}
/* set argv[0] to point to original file name */
- suword(iparams->uap->argv, (int)iparams->uap->fname);
+ suword(imgp->uap->argv, (int)imgp->uap->fname);
return(0);
}
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index eb956f5..e827ac9 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -28,7 +28,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: kern_exec.c,v 1.23 1995/10/08 00:06:01 swallace Exp $
+ * $Id: kern_exec.c,v 1.24 1995/10/21 08:38:11 davidg Exp $
*/
#include <sys/param.h>
@@ -80,40 +80,42 @@ execve(p, uap, retval)
struct nameidata nd, *ndp;
int *stack_base;
int error, len, i;
- struct image_params image_params, *iparams;
- struct vnode *vnodep;
+ struct image_params image_params, *imgp;
struct vattr attr;
- char *image_header;
- iparams = &image_params;
- bzero((caddr_t)iparams, sizeof(struct image_params));
- image_header = (char *)0;
+ imgp = &image_params;
/*
- * Initialize a few constants in the common area
+ * Initialize part of the common data
*/
- iparams->proc = p;
- iparams->uap = uap;
- iparams->attr = &attr;
+ imgp->proc = p;
+ imgp->uap = uap;
+ imgp->attr = &attr;
+ imgp->image_header = NULL;
+ imgp->argc = imgp->envc = 0;
+ imgp->entry_addr = 0;
+ imgp->vmspace_destroyed = 0;
+ imgp->interpreted = 0;
+ imgp->interpreter_name[0] = '\0';
/*
* Allocate temporary demand zeroed space for argument and
* environment strings
*/
- iparams->stringbase = (char *)vm_map_min(exec_map);
- error = vm_map_find(exec_map, NULL, 0, (vm_offset_t *)&iparams->stringbase,
+ imgp->stringbase = (char *)vm_map_min(exec_map);
+ error = vm_map_find(exec_map, NULL, 0, (vm_offset_t *)&imgp->stringbase,
ARG_MAX, TRUE);
if (error) {
log(LOG_WARNING, "execve: failed to allocate string space\n");
return (error);
}
- if (!iparams->stringbase) {
+ if (!imgp->stringbase) {
error = ENOMEM;
goto exec_fail;
}
- iparams->stringp = iparams->stringbase;
- iparams->stringspace = ARG_MAX;
+ imgp->stringp = imgp->stringbase;
+ imgp->stringspace = ARG_MAX;
/*
* Translate the file name. namei() returns a vnode pointer
@@ -127,14 +129,13 @@ interpret:
error = namei(ndp);
if (error) {
- vm_map_remove(exec_map, (vm_offset_t)iparams->stringbase,
- (vm_offset_t)iparams->stringbase + ARG_MAX);
+ vm_map_remove(exec_map, (vm_offset_t)imgp->stringbase,
+ (vm_offset_t)imgp->stringbase + ARG_MAX);
goto exec_fail;
}
- iparams->vnodep = vnodep = ndp->ni_vp;
-
- if (vnodep == NULL) {
+ imgp->vp = ndp->ni_vp;
+ if (imgp->vp == NULL) {
error = ENOEXEC;
goto exec_fail_dealloc;
}
@@ -142,13 +143,13 @@ interpret:
/*
* Check file permissions (also 'opens' file)
*/
- error = exec_check_permissions(iparams);
+ error = exec_check_permissions(imgp);
/*
* Lose the lock on the vnode. It's no longer needed, and must not
* exist for the pagefault paging to work below.
*/
- VOP_UNLOCK(vnodep);
+ VOP_UNLOCK(imgp->vp);
if (error)
goto exec_fail_dealloc;
@@ -158,18 +159,17 @@ interpret:
* kernel address space
*/
error = vm_mmap(kernel_map, /* map */
- (vm_offset_t *)&image_header, /* address */
+ (vm_offset_t *)&imgp->image_header, /* address */
PAGE_SIZE, /* size */
VM_PROT_READ, /* protection */
VM_PROT_READ, /* max protection */
0, /* flags */
- (caddr_t)vnodep, /* vnode */
+ (caddr_t)imgp->vp, /* vnode */
0); /* offset */
if (error) {
uprintf("mmap failed: %d\n",error);
goto exec_fail_dealloc;
}
- iparams->image_header = image_header;
/*
* Loop through list of image activators, calling each one.
@@ -181,7 +181,7 @@ interpret:
*/
for (i = 0; execsw[i]; ++i) {
if (execsw[i]->ex_imgact)
- error = (*execsw[i]->ex_imgact)(iparams);
+ error = (*execsw[i]->ex_imgact)(imgp);
else
continue;
@@ -189,17 +189,17 @@ interpret:
continue;
if (error)
goto exec_fail_dealloc;
- if (iparams->interpreted) {
+ if (imgp->interpreted) {
/* free old vnode and name buffer */
vrele(ndp->ni_vp);
FREE(ndp->ni_cnd.cn_pnbuf, M_NAMEI);
- if (vm_map_remove(kernel_map, (vm_offset_t)image_header,
- (vm_offset_t)image_header + PAGE_SIZE))
+ if (vm_map_remove(kernel_map, (vm_offset_t)imgp->image_header,
+ (vm_offset_t)imgp->image_header + PAGE_SIZE))
panic("execve: header dealloc failed (1)");
/* set new name to that of the interpreter */
NDINIT(ndp, LOOKUP, LOCKLEAF | FOLLOW | SAVENAME,
- UIO_SYSSPACE, iparams->interpreter_name, p);
+ UIO_SYSSPACE, imgp->interpreter_name, p);
goto interpret;
}
break;
@@ -213,7 +213,7 @@ interpret:
/*
* Copy out strings (args and env) and initialize stack base
*/
- stack_base = exec_copyout_strings(iparams);
+ stack_base = exec_copyout_strings(imgp);
p->p_vmspace->vm_minsaddr = (char *)stack_base;
/*
@@ -222,9 +222,9 @@ interpret:
* Else stuff argument count as first item on stack
*/
if (p->p_sysent->sv_fixup)
- (*p->p_sysent->sv_fixup)(&stack_base, iparams);
+ (*p->p_sysent->sv_fixup)(&stack_base, imgp);
else
- suword(--stack_base, iparams->argc);
+ suword(--stack_base, imgp->argc);
/* close files on exec */
fdcloseexec(p);
@@ -247,32 +247,36 @@ interpret:
wakeup((caddr_t)p->p_pptr);
}
- /* implement set userid/groupid */
- p->p_flag &= ~P_SUGID;
-
/*
- * Turn off kernel tracing for set-id programs, except for
- * root.
+ * Implement image setuid/setgid. Disallow if the process is
+ * being traced.
*/
- if (p->p_tracep && (attr.va_mode & (VSUID | VSGID)) &&
- suser(p->p_ucred, &p->p_acflag)) {
- p->p_traceflag = 0;
- vrele(p->p_tracep);
- p->p_tracep = 0;
- }
- if ((attr.va_mode & VSUID) && (p->p_flag & P_TRACED) == 0) {
- p->p_ucred = crcopy(p->p_ucred);
- p->p_ucred->cr_uid = attr.va_uid;
- p->p_flag |= P_SUGID;
- }
- if ((attr.va_mode & VSGID) && (p->p_flag & P_TRACED) == 0) {
+ if ((attr.va_mode & (VSUID | VSGID)) &&
+ (p->p_flag & P_TRACED) == 0) {
+ /*
+ * Turn off syscall tracing for set-id programs, except for
+ * root.
+ */
+ if (p->p_tracep && suser(p->p_ucred, &p->p_acflag)) {
+ p->p_traceflag = 0;
+ vrele(p->p_tracep);
+ p->p_tracep = NULL;
+ }
+ /*
+ * Set the new credentials.
+ */
p->p_ucred = crcopy(p->p_ucred);
- p->p_ucred->cr_groups[0] = attr.va_gid;
+ if (attr.va_mode & VSUID)
+ p->p_ucred->cr_uid = attr.va_uid;
+ if (attr.va_mode & VSGID)
+ p->p_ucred->cr_groups[0] = attr.va_gid;
p->p_flag |= P_SUGID;
+ } else {
+ p->p_flag &= ~P_SUGID;
}
/*
- * Implement correct POSIX saved uid behavior.
+ * Implement correct POSIX saved-id behavior.
*/
p->p_cred->p_svuid = p->p_ucred->cr_uid;
p->p_cred->p_svgid = p->p_ucred->cr_gid;
@@ -296,16 +300,16 @@ interpret:
p->p_acflag &= ~AFORK;
/* Set entry address */
- setregs(p, iparams->entry_addr, (u_long)stack_base);
+ setregs(p, imgp->entry_addr, (u_long)stack_base);
/*
* free various allocated resources
*/
- if (vm_map_remove(exec_map, (vm_offset_t)iparams->stringbase,
- (vm_offset_t)iparams->stringbase + ARG_MAX))
+ if (vm_map_remove(exec_map, (vm_offset_t)imgp->stringbase,
+ (vm_offset_t)imgp->stringbase + ARG_MAX))
panic("execve: string buffer dealloc failed (1)");
- if (vm_map_remove(kernel_map, (vm_offset_t)image_header,
- (vm_offset_t)image_header + PAGE_SIZE))
+ if (vm_map_remove(kernel_map, (vm_offset_t)imgp->image_header,
+ (vm_offset_t)imgp->image_header + PAGE_SIZE))
panic("execve: header dealloc failed (2)");
vrele(ndp->ni_vp);
FREE(ndp->ni_cnd.cn_pnbuf, M_NAMEI);
@@ -313,20 +317,20 @@ interpret:
return (0);
exec_fail_dealloc:
- if (iparams->stringbase && iparams->stringbase != (char *)-1)
- if (vm_map_remove(exec_map, (vm_offset_t)iparams->stringbase,
- (vm_offset_t)iparams->stringbase + ARG_MAX))
+ if (imgp->stringbase && imgp->stringbase != (char *)-1)
+ if (vm_map_remove(exec_map, (vm_offset_t)imgp->stringbase,
+ (vm_offset_t)imgp->stringbase + ARG_MAX))
panic("execve: string buffer dealloc failed (2)");
- if (iparams->image_header && iparams->image_header != (char *)-1)
- if (vm_map_remove(kernel_map, (vm_offset_t)image_header,
- (vm_offset_t)image_header + PAGE_SIZE))
+ if (imgp->image_header && imgp->image_header != (char *)-1)
+ if (vm_map_remove(kernel_map, (vm_offset_t)imgp->image_header,
+ (vm_offset_t)imgp->image_header + PAGE_SIZE))
panic("execve: header dealloc failed (3)");
if (ndp->ni_vp)
vrele(ndp->ni_vp);
FREE(ndp->ni_cnd.cn_pnbuf, M_NAMEI);
exec_fail:
- if (iparams->vmspace_destroyed) {
+ if (imgp->vmspace_destroyed) {
/* sorry, no more process anymore. exit gracefully */
exit1(p, W_EXITCODE(0, SIGABRT));
/* NOT REACHED */
@@ -342,19 +346,19 @@ exec_fail:
* automatically in trap.c.
*/
int
-exec_new_vmspace(iparams)
- struct image_params *iparams;
+exec_new_vmspace(imgp)
+ struct image_params *imgp;
{
int error;
- struct vmspace *vmspace = iparams->proc->p_vmspace;
+ struct vmspace *vmspace = imgp->proc->p_vmspace;
caddr_t stack_addr = (caddr_t) (USRSTACK - SGROWSIZ);
- iparams->vmspace_destroyed = 1;
+ imgp->vmspace_destroyed = 1;
/* Blow away entire process VM */
#ifdef SYSVSHM
if (vmspace->vm_shm)
- shmexit(iparams->proc);
+ shmexit(imgp->proc);
#endif
vm_map_remove(&vmspace->vm_map, 0, USRSTACK);
@@ -377,8 +381,8 @@ exec_new_vmspace(iparams)
* address space into the temporary string buffer.
*/
int
-exec_extract_strings(iparams)
- struct image_params *iparams;
+exec_extract_strings(imgp)
+ struct image_params *imgp;
{
char **argv, **envv;
char *argp, *envp;
@@ -388,21 +392,21 @@ exec_extract_strings(iparams)
* extract arguments first
*/
- argv = iparams->uap->argv;
+ argv = imgp->uap->argv;
if (argv) {
while ((argp = (caddr_t) fuword(argv++))) {
if (argp == (caddr_t) -1)
return (EFAULT);
- if ((error = copyinstr(argp, iparams->stringp,
- iparams->stringspace, &length))) {
+ if ((error = copyinstr(argp, imgp->stringp,
+ imgp->stringspace, &length))) {
if (error == ENAMETOOLONG)
return(E2BIG);
return (error);
}
- iparams->stringspace -= length;
- iparams->stringp += length;
- iparams->argc++;
+ imgp->stringspace -= length;
+ imgp->stringp += length;
+ imgp->argc++;
}
}
@@ -410,21 +414,21 @@ exec_extract_strings(iparams)
* extract environment strings
*/
- envv = iparams->uap->envv;
+ envv = imgp->uap->envv;
if (envv) {
while ((envp = (caddr_t) fuword(envv++))) {
if (envp == (caddr_t) -1)
return (EFAULT);
- if ((error = copyinstr(envp, iparams->stringp,
- iparams->stringspace, &length))) {
+ if ((error = copyinstr(envp, imgp->stringp,
+ imgp->stringspace, &length))) {
if (error == ENAMETOOLONG)
return(E2BIG);
return (error);
}
- iparams->stringspace -= length;
- iparams->stringp += length;
- iparams->envc++;
+ imgp->stringspace -= length;
+ imgp->stringp += length;
+ imgp->envc++;
}
}
@@ -437,8 +441,8 @@ exec_extract_strings(iparams)
* so that it can be used as the initial stack pointer.
*/
int *
-exec_copyout_strings(iparams)
- struct image_params *iparams;
+exec_copyout_strings(imgp)
+ struct image_params *imgp;
{
int argc, envc;
char **vectp;
@@ -450,27 +454,27 @@ exec_copyout_strings(iparams)
* Calculate string base and vector table pointers.
*/
arginfo = PS_STRINGS;
- destp = (caddr_t)arginfo - roundup((ARG_MAX - iparams->stringspace), sizeof(char *));
+ destp = (caddr_t)arginfo - roundup((ARG_MAX - imgp->stringspace), sizeof(char *));
/*
* The '+ 2' is for the null pointers at the end of each of the
* arg and env vector sets
*/
vectp = (char **) (destp -
- (iparams->argc + iparams->envc + 2) * sizeof(char *));
+ (imgp->argc + imgp->envc + 2) * sizeof(char *));
/*
* vectp also becomes our initial stack base
*/
stack_base = (int *)vectp;
- stringp = iparams->stringbase;
- argc = iparams->argc;
- envc = iparams->envc;
+ stringp = imgp->stringbase;
+ argc = imgp->argc;
+ envc = imgp->envc;
/*
* Copy out strings - arguments and environment.
*/
- copyout(stringp, destp, ARG_MAX - iparams->stringspace);
+ copyout(stringp, destp, ARG_MAX - imgp->stringspace);
/*
* Fill in "ps_strings" struct for ps, w, etc.
@@ -515,24 +519,24 @@ exec_copyout_strings(iparams)
* Return 0 for success or error code on failure.
*/
static int
-exec_check_permissions(iparams)
- struct image_params *iparams;
+exec_check_permissions(imgp)
+ struct image_params *imgp;
{
- struct proc *p = iparams->proc;
- struct vnode *vnodep = iparams->vnodep;
- struct vattr *attr = iparams->attr;
+ struct proc *p = imgp->proc;
+ struct vnode *vp = imgp->vp;
+ struct vattr *attr = imgp->attr;
int error;
/*
* Check number of open-for-writes on the file and deny execution
* if there are any.
*/
- if (vnodep->v_writecount) {
+ if (vp->v_writecount) {
return (ETXTBSY);
}
/* Get file attributes */
- error = VOP_GETATTR(vnodep, attr, p->p_ucred, p);
+ error = VOP_GETATTR(vp, attr, p->p_ucred, p);
if (error)
return (error);
@@ -544,7 +548,7 @@ exec_check_permissions(iparams)
* file really is executable.
* 3) Insure that the file is a regular file.
*/
- if ((vnodep->v_mount->mnt_flag & MNT_NOEXEC) ||
+ if ((vp->v_mount->mnt_flag & MNT_NOEXEC) ||
((attr->va_mode & 0111) == 0) ||
(attr->va_type != VREG)) {
return (EACCES);
@@ -560,7 +564,7 @@ exec_check_permissions(iparams)
* Disable setuid/setgid if the filesystem prohibits it or if
* the process is being traced.
*/
- if ((vnodep->v_mount->mnt_flag & MNT_NOSUID) || (p->p_flag & P_TRACED))
+ if ((vp->v_mount->mnt_flag & MNT_NOSUID) || (p->p_flag & P_TRACED))
attr->va_mode &= ~(VSUID | VSGID);
/*
@@ -568,11 +572,11 @@ exec_check_permissions(iparams)
* Then call filesystem specific open routine (which does nothing
* in the general case).
*/
- error = VOP_ACCESS(vnodep, VEXEC, p->p_ucred, p);
+ error = VOP_ACCESS(vp, VEXEC, p->p_ucred, p);
if (error)
return (error);
- error = VOP_OPEN(vnodep, FREAD, p->p_ucred, p);
+ error = VOP_OPEN(vp, FREAD, p->p_ucred, p);
if (error)
return (error);
diff --git a/sys/sys/imgact.h b/sys/sys/imgact.h
index 354efb2..11f911b 100644
--- a/sys/sys/imgact.h
+++ b/sys/sys/imgact.h
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: imgact.h,v 1.8 1994/10/02 17:24:45 phk Exp $
+ * $Id: imgact.h,v 1.9 1995/05/30 08:14:24 rgrimes Exp $
*/
#ifndef _SYS_IMGACT_H_
@@ -43,7 +43,7 @@
struct image_params {
struct proc *proc; /* our process struct */
struct execve_args *uap; /* syscall arguments */
- struct vnode *vnodep; /* pointer to vnode of file to exec */
+ struct vnode *vp; /* pointer to vnode of file to exec */
struct vattr *attr; /* attributes of file */
const char *image_header; /* head of file to exec */
char *stringbase; /* base address of tmp string storage */
OpenPOWER on IntegriCloud