sync with OpenBSD -current
This commit is contained in:
parent
ee68147dcd
commit
1cefe29c7e
1651 changed files with 283292 additions and 68089 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: exec_elf.c,v 1.184 2024/01/16 19:05:01 deraadt Exp $ */
|
||||
/* $OpenBSD: exec_elf.c,v 1.185 2024/01/17 22:22:25 kurt Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Per Fogelstrom
|
||||
|
@ -1154,7 +1154,7 @@ coredump_elf(struct proc *p, void *cookie)
|
|||
goto out;
|
||||
|
||||
error = coredump_write(cookie, UIO_SYSSPACE, ws.psections,
|
||||
ws.psectionslen);
|
||||
ws.psectionslen, 0);
|
||||
if (error)
|
||||
goto out;
|
||||
|
||||
|
@ -1193,10 +1193,11 @@ coredump_elf(struct proc *p, void *cookie)
|
|||
if (pent->p_vaddr == p->p_p->ps_sigcode &&
|
||||
pent->p_filesz == sigcode_sz) {
|
||||
error = coredump_write(cookie, UIO_SYSSPACE,
|
||||
(void *)sigcode_va, sigcode_sz);
|
||||
(void *)sigcode_va, sigcode_sz, 0);
|
||||
} else {
|
||||
error = coredump_write(cookie, UIO_USERSPACE,
|
||||
(void *)(vaddr_t)pent->p_vaddr, pent->p_filesz);
|
||||
(void *)(vaddr_t)pent->p_vaddr, pent->p_filesz,
|
||||
(pent->p_flags & PF_ISVNODE));
|
||||
}
|
||||
if (error)
|
||||
goto out;
|
||||
|
@ -1298,7 +1299,7 @@ coredump_setup_elf(int segment_count, void *cookie)
|
|||
}
|
||||
|
||||
/* Write out the ELF header. */
|
||||
error = coredump_write(ws->iocookie, UIO_SYSSPACE, &ehdr, sizeof(ehdr));
|
||||
error = coredump_write(ws->iocookie, UIO_SYSSPACE, &ehdr, sizeof(ehdr), 0);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -1309,11 +1310,11 @@ coredump_setup_elf(int segment_count, void *cookie)
|
|||
if (ehdr.e_shnum != 0) {
|
||||
Elf_Shdr shdr = { .sh_info = ws->npsections };
|
||||
error = coredump_write(ws->iocookie, UIO_SYSSPACE, &shdr,
|
||||
sizeof shdr);
|
||||
sizeof shdr, 0);
|
||||
if (error)
|
||||
return error;
|
||||
error = coredump_write(ws->iocookie, UIO_SYSSPACE, &shstrtab,
|
||||
sizeof(shstrtab.shdr) + sizeof(shstrtab.shstrtab));
|
||||
sizeof(shstrtab.shdr) + sizeof(shstrtab.shstrtab), 0);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
|
@ -1348,7 +1349,7 @@ coredump_setup_elf(int segment_count, void *cookie)
|
|||
|
||||
int
|
||||
coredump_walk_elf(vaddr_t start, vaddr_t realend, vaddr_t end, vm_prot_t prot,
|
||||
int nsegment, void *cookie)
|
||||
int isvnode, int nsegment, void *cookie)
|
||||
{
|
||||
struct writesegs_state *ws = cookie;
|
||||
Elf_Phdr phdr;
|
||||
|
@ -1370,6 +1371,8 @@ coredump_walk_elf(vaddr_t start, vaddr_t realend, vaddr_t end, vm_prot_t prot,
|
|||
phdr.p_flags |= PF_W;
|
||||
if (prot & PROT_EXEC)
|
||||
phdr.p_flags |= PF_X;
|
||||
if (isvnode)
|
||||
phdr.p_flags |= PF_ISVNODE;
|
||||
phdr.p_align = PAGE_SIZE;
|
||||
|
||||
ws->secoff += phdr.p_filesz;
|
||||
|
@ -1446,17 +1449,17 @@ coredump_notes_elf(struct proc *p, void *iocookie, size_t *sizep)
|
|||
nhdr.type = NT_OPENBSD_AUXV;
|
||||
|
||||
error = coredump_write(iocookie, UIO_SYSSPACE,
|
||||
&nhdr, sizeof(nhdr));
|
||||
&nhdr, sizeof(nhdr), 0);
|
||||
if (error)
|
||||
return (error);
|
||||
|
||||
error = coredump_write(iocookie, UIO_SYSSPACE,
|
||||
"OpenBSD", elfround(nhdr.namesz));
|
||||
"OpenBSD", elfround(nhdr.namesz), 0);
|
||||
if (error)
|
||||
return (error);
|
||||
|
||||
error = coredump_write(iocookie, UIO_USERSPACE,
|
||||
(caddr_t)pr->ps_auxinfo, nhdr.descsz);
|
||||
(caddr_t)pr->ps_auxinfo, nhdr.descsz, 0);
|
||||
if (error)
|
||||
return (error);
|
||||
}
|
||||
|
@ -1596,15 +1599,15 @@ coredump_writenote_elf(struct proc *p, void *cookie, Elf_Note *nhdr,
|
|||
{
|
||||
int error;
|
||||
|
||||
error = coredump_write(cookie, UIO_SYSSPACE, nhdr, sizeof(*nhdr));
|
||||
error = coredump_write(cookie, UIO_SYSSPACE, nhdr, sizeof(*nhdr), 0);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
error = coredump_write(cookie, UIO_SYSSPACE, name,
|
||||
elfround(nhdr->namesz));
|
||||
elfround(nhdr->namesz), 0);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
return coredump_write(cookie, UIO_SYSSPACE, data, nhdr->descsz);
|
||||
return coredump_write(cookie, UIO_SYSSPACE, data, nhdr->descsz, 0);
|
||||
}
|
||||
#endif /* !SMALL_KERNEL */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_exec.c,v 1.253 2024/01/16 19:05:01 deraadt Exp $ */
|
||||
/* $OpenBSD: kern_exec.c,v 1.254 2024/01/17 18:56:13 deraadt Exp $ */
|
||||
/* $NetBSD: kern_exec.c,v 1.75 1996/02/09 18:59:28 christos Exp $ */
|
||||
|
||||
/*-
|
||||
|
@ -268,21 +268,11 @@ sys_execve(struct proc *p, void *v, register_t *retval)
|
|||
#ifdef MACHINE_STACK_GROWS_UP
|
||||
size_t slen;
|
||||
#endif
|
||||
vaddr_t pc = PROC_PC(p);
|
||||
char *stack;
|
||||
struct ps_strings arginfo;
|
||||
struct vmspace *vm = p->p_vmspace;
|
||||
struct vnode *otvp;
|
||||
|
||||
if (vm->vm_execve &&
|
||||
(pc >= vm->vm_execve_end || pc < vm->vm_execve)) {
|
||||
printf("%s(%d): execve %lx outside %lx-%lx\n", pr->ps_comm,
|
||||
pr->ps_pid, pc, vm->vm_execve, vm->vm_execve_end);
|
||||
p->p_p->ps_acflag |= AEXECVE;
|
||||
sigabort(p);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get other threads to stop, if contested return ERESTART,
|
||||
* so the syscall is restarted after halting in userret.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_sig.c,v 1.320 2023/10/06 08:58:13 claudio Exp $ */
|
||||
/* $OpenBSD: kern_sig.c,v 1.321 2024/01/17 22:22:25 kurt Exp $ */
|
||||
/* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -1745,7 +1745,8 @@ out:
|
|||
|
||||
#ifndef SMALL_KERNEL
|
||||
int
|
||||
coredump_write(void *cookie, enum uio_seg segflg, const void *data, size_t len)
|
||||
coredump_write(void *cookie, enum uio_seg segflg, const void *data, size_t len,
|
||||
int isvnode)
|
||||
{
|
||||
struct coredump_iostate *io = cookie;
|
||||
off_t coffset = 0;
|
||||
|
@ -1766,7 +1767,7 @@ coredump_write(void *cookie, enum uio_seg segflg, const void *data, size_t len)
|
|||
(caddr_t)data + coffset, chunk,
|
||||
io->io_offset + coffset, segflg,
|
||||
IO_UNIT, io->io_cred, NULL, io->io_proc);
|
||||
if (error) {
|
||||
if (error && (error != EFAULT || !isvnode)) {
|
||||
struct process *pr = io->io_proc->p_p;
|
||||
|
||||
if (error == ENOSPC)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue