https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225105
Yanko Yankulov <yanko.yanku...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |yanko.yanku...@gmail.com --- Comment #11 from Yanko Yankulov <yanko.yanku...@gmail.com> --- Hi guys, Hit this a few weeks ago haven't notice the ticket, the sysarch call will try to load the arguments from userspace and fail as they are on the kernel stack. A working (but ugly) solution is to duplicate the code in linux_machdep: --- a/sys/amd64/linux/linux_machdep.c +++ b/sys/amd64/linux/linux_machdep.c @@ -240,10 +240,14 @@ linux_arch_prctl(struct thread *td, struct linux_arch_prctl_args *args) error = EPERM; break; case LINUX_ARCH_SET_FS: - bsd_args.op = AMD64_SET_FSBASE; - bsd_args.parms = (void *)args->addr; - error = sysarch(td, &bsd_args); - if (error == EINVAL) + if (args->addr < VM_MAXUSER_ADDRESS) { + struct pcb *pcb = curthread->td_pcb; + set_pcb_flags(pcb, PCB_FULL_IRET); + pcb->pcb_fsbase = args->addr; + td->td_frame->tf_fs = _ufssel; + error = 0; + } + else error = EPERM; A better solution will be to change sysarch to accept addition parameter about the location of the memory, but haven't have the time to explore this path yet. Hope this helps. -- You are receiving this mail because: You are the assignee for the bug. _______________________________________________ freebsd-emulation@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-emulation To unsubscribe, send any mail to "freebsd-emulation-unsubscr...@freebsd.org"