Bill Allombert on Wed, 12 Oct 2016 23:11:09 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Use PROT_NONE for unused virtual stack memory |
On Sat, Sep 24, 2016 at 08:33:28AM +0200, Jeroen Demeyer wrote: > Hello pari-dev, > > In attachment you find a patch to change the way how stack memory is > allocated with mmap(). It is meant to improve support for Linux with > vm.overcommit = 2 [1] and still allow a reasonably large parisizemax in that > case. > diff --git a/src/language/init.c b/src/language/init.c > index 439e279..be87a79 100644 > --- a/src/language/init.c > +++ b/src/language/init.c > @@ -624,14 +624,11 @@ pari_add_defaults_module(entree *ep) > #ifndef MAP_ANONYMOUS > #define MAP_ANONYMOUS MAP_ANON > #endif > -#ifndef MAP_NORESERVE > -#define MAP_NORESERVE 0 > -#endif > static void * > pari_mainstack_malloc(size_t size) > { > void *b = mmap(NULL, size, PROT_READ|PROT_WRITE, > - MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE,-1,0); > + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); > return (b == MAP_FAILED) ? NULL: b; > } Is it correct ? It seems to me that we want to use PROT_NONE here as well, as you do in config/has_mmap.c. Also, I think I would prefer if your patch would keep the function 'pari_mainstack_mreset' which would do something like mmap(s, size, PROT_NONE, MAP_FIXED|MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); and maybe add a function 'pari_mainstack_mextend' that would do mprotect(s, size(void*)alignbot, st->top - alignbot, PROT_READ|PROT_WRITE)) Cheers, Bill.