On Mon, Apr 17, 2017 at 05:26:52PM -0700, Jeremy Evans wrote:

> posix_memalign doesn't seem to work with malloc canaries
> in some allocations.  This appears to be what caused the
> issue malloc canary failure in ruby when the page size
> was accidentally set to high.  Example:
> 
> #include <stdlib.h>
> 
> char *malloc_options = "C";
> 
> int main(int argc, char** argv){
>   void *v;
>   posix_memalign(&v, 8192, 8192-40);
>   free(v);
>   exit(0);
> }

Try this,

        -Otto

Index: malloc.c
===================================================================
RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
retrieving revision 1.222
diff -u -p -r1.222 malloc.c
--- malloc.c    17 Apr 2017 16:36:35 -0000      1.222
+++ malloc.c    18 Apr 2017 05:21:13 -0000
@@ -2018,6 +2018,9 @@ omemalign(struct dir_info *pool, size_t 
                else
                        memset(p, SOME_JUNK, psz - mopts.malloc_guard);
        }
+       else if (mopts.chunk_canaries)
+               fill_canary(p, sz - mopts.malloc_guard,
+                   psz - mopts.malloc_guard);
 
        return p;
 }

Reply via email to