Many thanks for your replies. OpenLisp has always the possibility to use -novm option which uses malloc instead. It of course prevents save/restore core images to work. I'll try different strategies wo. MAX_FIXED and also how to avoid SAR and let you informed.
Now a BIG thanks to OpenBSD team members for your work and support. C. -----Original Message----- From: Theo de Raadt [mailto:[email protected]] Sent: Wednesday, January 20, 2021 08:41 To: Otto Moerbeek Cc: [email protected]; [email protected] Subject: Re: munmap sometimes does coredump on arm after mmap success Otto Moerbeek <[email protected]> wrote: > On Wed, Jan 20, 2021 at 07:04:08AM +0100, Christian Jullien wrote: > > > Hi, > > > > I'm running OpenBSD 6.8 on arm : > > > > $ sysctl | grep hw > > hw.machine=armv7 > > hw.model=ARM Cortex-A8 r3p2 > > hw.ncpu=1 > > hw.byteorder=1234 > > hw.pagesize=4096 > > hw.disknames=<edited> > > hw.diskcount=2 > > hw.cpuspeed=0 > > hw.product=TI AM335x BeagleBone Black > > hw.serialno==<edited> > > hw.physmem=477257728 > > hw.usermem=477241344 > > hw.ncpufound=1 > > hw.allowpowerdown=1 > > hw.ncpuonline=1 > > > > $ uname -a > > OpenBSD <edited> 6.8 GENERIC#353 armv7 > > $ clang -v > > OpenBSD clang version 10.0.1 > > Target: armv7-unknown-openbsd6.8-gnueabi > > Thread model: posix > > InstalledDir: /usr/bin > > > > And I'm trying to port my OpenLisp ISLISP compiler on it (which is quite > > different than OpenLISP, I have anteriority of the name). It needs a portion > > of memory reserved at a fixed address to allow to expand memory on demand > > and to save/restore images. > > This code works on all systems I know (> 160 GNU triplets) and it works for > > years on OpenBSD x86/x64. > > > > On arm, the portion of code below, sometimes does a coredump after mmap > > successfully returned the desired memory mapped region. > > Changing the start address or memory size (down to 0x200000 == 2Mb) does not > > change the issue. > > I can understand that mmap can fail for some given values but not why munmap > > fails after mmap success. > > This is not a bug. > > mmap with MAP_FIXED replaces any existing mapping. The unmap then zaps that > mapping, which could contain code or data used by the process. Due to > address space randomization of various things, it depens on luck. > > The proper way is to not depend on a fixed address. If your image dump > contains addresses, make them relative. For OpenLisp that might be a > huge task though. But depending on fixed addresses is not going to > work in the end. > > An approach that does not do damage but won't succeeed all the time: > > Try without MAP_FIXED. The hint will be used and if it overlaps with > an existing mapping, mmap will return a different address or MAP_FAILED > if it could not. Then check the address and if it isn't the expected > address, bail out. It is better to fail than to cause memory corruption. Yep. As an experiment, try MAP_FIXED and suggest the address &printf. Good times, really very good times.
