I am saying I want better study on all architectures, so that I don't hit problems (first) in the snapshots cluster.
Theo de Raadt <dera...@openbsd.org> wrote: > I am blocking this. > > I don't see any messaging which suggests this has been run on all > architectures. It might still hit some MD code which is wrong. > > Klemens Nanni <k...@openbsd.org> wrote: > > > On Tue, Jan 11, 2022 at 09:54:44AM -0700, Theo de Raadt wrote: > > > > Now this is clearly a "slow" path. I don't think there is any reason > > > > not to put all the code in that if (uvw_wxabort) block under the > > > > kernel lock. For now I think making access to ps_wxcounter atomic is > > > > just too fine grained. > > > > > > Right. Lock the whole block. > > > > Thanks everyone, here's the combined diff for that. > > > > Index: kern/syscalls.master > > =================================================================== > > RCS file: /cvs/src/sys/kern/syscalls.master,v > > retrieving revision 1.222 > > diff -u -p -r1.222 syscalls.master > > --- kern/syscalls.master 11 Jan 2022 08:09:14 -0000 1.222 > > +++ kern/syscalls.master 11 Jan 2022 23:10:50 -0000 > > @@ -126,7 +126,7 @@ > > struct sigaction *osa); } > > 47 STD NOLOCK { gid_t sys_getgid(void); } > > 48 STD NOLOCK { int sys_sigprocmask(int how, sigset_t mask); } > > -49 STD { void *sys_mmap(void *addr, size_t len, int prot, \ > > +49 STD NOLOCK { void *sys_mmap(void *addr, size_t len, int prot, \ > > int flags, int fd, off_t pos); } > > 50 STD { int sys_setlogin(const char *namebuf); } > > #ifdef ACCOUNTING > > Index: uvm/uvm_mmap.c > > =================================================================== > > RCS file: /cvs/src/sys/uvm/uvm_mmap.c,v > > retrieving revision 1.168 > > diff -u -p -r1.168 uvm_mmap.c > > --- uvm/uvm_mmap.c 5 Jan 2022 17:53:44 -0000 1.168 > > +++ uvm/uvm_mmap.c 11 Jan 2022 23:02:13 -0000 > > @@ -183,12 +183,14 @@ uvm_wxcheck(struct proc *p, char *call) > > return 0; > > > > if (uvm_wxabort) { > > + KERNEL_LOCK(); > > /* Report W^X failures */ > > if (pr->ps_wxcounter++ == 0) > > log(LOG_NOTICE, "%s(%d): %s W^X violation\n", > > pr->ps_comm, pr->ps_pid, call); > > /* Send uncatchable SIGABRT for coredump */ > > sigexit(p, SIGABRT); > > + KERNEL_UNLOCK(); > > } > > > > return ENOTSUP; > > >