On Thu, 7 Nov 2019, Theo Buehler wrote:
> I was trying to debug a WIP port, so I compiled it with '-g -O0' on my 
> amd64 laptop. When trying to execute the binary, I got
> 
> $ ./lean
> ksh: ./lean: Cannot allocate memory
> 
> mpi was able to pinpoint this to the following check in exec_elf.c:
> 
>  699                 case PT_OPENBSD_RANDOMIZE:
>  700                         if (ph[i].p_memsz > randomizequota) {
>  701                                 error = ENOMEM;
>  702                                 goto bad;
>  703                         }
> 
> so we got ENOMEM because some of the the program headers are too large.
...
>   OPENBSD_RANDOM 0x0000000001185000 0x0000000001185000 0x0000000001185000
>                  0x000000000012c1a0 0x000000000012c1a0  RW     8

Right: we limit random data section to 0x100000 in size.  So, what's 
making the section so big on this binary?  There's a bug in how the 
compiler generates retguard symbols** that can cause it to take more than 
expected, but even for the kernel it didn't blow it up that large.


** we have a fix, we just need to adjust kernel ld scripts to work with 
it...


> I'm not sure if this a bug or a feature, but if it happens to be a bug, the
> binary (compiled with -current) and the ports makefile available under
> 
>       cvs:~tb:lean/{lean,lean.tgz}

Unfortunately, the binary is stripped so there are no symbols for the 
.openbsd.randomdata segment so we can't confirm the cause.

Reply via email to