Josh Elsasser <[email protected]> wrote:
> On Fri, Nov 29, 2019 at 10:12:10AM +0100, Thomas de Grivel wrote:
> > Maybe Go is not the only problem, I see SBCL compiling syscalls too.
> >
> > Truth is libc is for C and not all programs are written in C nowadays.
>
> Where are you seeing SBCL compiling direct syscalls? In my testing,
> SBCL self-hosts just fine under a kernel modified to disallow syscalls
> from the text segment, whereas go is killed under such a kernel. Are
> you sure you're not seeing SBCL compile calls to the libc syscall
> wrappers?
At this point, I am only aware of go. go can be fixed, actually go has
been fixed to satisfy ABI-instability on another system, and we here at
OpenBSD are the kings of ABI-instability and I have wanted us to go that
way, and I predict it will happen.
If other things are broken, we need accurate reports instead of drama.
The commited diff allows main-program-syscall in dynamic binaries until
go is fixed.
Here's a kernel diff which will expose such problems, by removing that
permission.
If other problems are identified, work on them can start in parallel.
Index: exec_elf.c
===================================================================
RCS file: /cvs/src/sys/kern/exec_elf.c,v
retrieving revision 1.152
diff -u -p -u -r1.152 exec_elf.c
--- exec_elf.c 29 Nov 2019 06:34:45 -0000 1.152
+++ exec_elf.c 29 Nov 2019 17:07:34 -0000
@@ -621,17 +621,12 @@ exec_elf_makecmds(struct proc *p, struct
}
} else
addr = ELF_NO_ADDR;
- /*
- * static binary: main program does system calls
- * dynamic binary: regular main program won't do system
- * calls, unfortunately go binaries do...
- */
- flags |= VMCMD_SYSCALL;
if (interp == NULL) {
/*
* static binary: no ld.so, no late request for
* syscalls inside libc,so block msyscall()
*/
+ flags |= VMCMD_SYSCALL;
p->p_vmspace->vm_map.flags |=
VM_MAP_SYSCALL_ONCE;
}