tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: cmake core dumps in -6 emulation
On Fri, Jul 01, 2022 at 02:20:02PM +0200, Edgar Fuß wrote:
> > Ktrace it
> As mentioned, that doesn't work (well, it works, which is the problem).
>
> > there are 3 err() calls in pthread__init()
>
> Starting with
> #8 0x000071b551460ac0 in err () from /usr/lib/libc.so.12
> #9 0x000071b55240c47b in pthread__init () from /usr/lib/libpthread.so.1
> I disassembled a bit before 0x000071b55240c47b, the relevant part being
> 0x71b55240c468 <pthread__init+1265>: lea 0x56a(%rip),%rsi # 0x71b55240c9d9
> 0x71b55240c46f <pthread__init+1272>: mov $0x1,%edi
> 0x71b55240c474 <pthread__init+1277>: xor %eax,%eax
> 0x71b55240c476 <pthread__init+1279>: callq 0x71b552405eb0 <err@plt>
> 0x71b55240c47b <pthread__hashlock>: mov %rdi,%rax
> and x/s 0x71b55240c9d9 says
> 0x71b55240c9d9: "mprotect stack"
>
> So what's going wrong?
Ah - probably inlining of the pthread__initmain() call, which does
base = (void *)(pthread__sp() & pthread__threadmask);
if ((pthread__sp() - (uintptr_t)base) < 4 * pagesize) {
pthread__mainbase = (vaddr_t)base;
base = STACK_GROW(base, pthread__stacksize);
pthread__mainstruct = (vaddr_t)base;
if (mprotect(base, pthread__stacksize,
PROT_READ|PROT_WRITE) == -1)
err(1, "mprotect stack");
}
size = pthread__stacksize;
and your ktrace shows:
23687 1 cmake CALL mprotect(0x7f7fff800000,0x400000,3)
23687 1 cmake RET mprotect -1 errno 13 Permission denied
and this sounds like PaX mprotect at work - you could test with paxctl
on the cmake file (or see below). It seems we did not enable
PAX_MPROTECT by default on amd64 before netbsd-8, so the old userland
might not be fully ready for it.
Maybe you should set sysctl security.pax.mprotect.global=0 while building
the old pkgs?
Martin
Home |
Main Index |
Thread Index |
Old Index