OpenBSD 6.4: MAP_STACK

Claus Assmann <[email protected]> Thu, 6 Dec 2018 11:20:43 -0800
Newsgroups gmane.comp.lib.state-threads.devel
Message-ID <[email protected]>
OpenBSD 6.4 introduced a new flag for mmap(2):

    * Implemented MAP_STACK option for mmap(2). At pagefaults and
      syscalls the kernel will check that the stack pointer points
      to MAP_STACK memory, which mitigates against attacks using
      stack pivots.

so this needs to be set:

Index: stk.c
===================================================================
RCS file: /home/ca/cvs/mta/statethreads/stk.c,v
retrieving revision 1.3
retrieving revision 1.3.12.1
diff -u -r1.3 -r1.3.12.1
--- stk.c	7 Sep 2005 22:40:34 -0000	1.3
+++ stk.c	4 Dec 2018 11:45:44 -0000	1.3.12.1
@@ -138,13 +139,15 @@
 #elif defined (MD_USE_BSD_ANON_MMAP)
   mmap_flags |= MAP_ANON;
 #else
-#error Unknown OS
+#error Unknown OS: unspecified ANON_MMAP option
+#endif
+#if defined (MAP_STACK)
+  mmap_flags |= MAP_STACK;
 #endif
 
   vaddr = mmap(NULL, size, PROT_READ | PROT_WRITE, mmap_flags, zero_fd, 0);
   if (vaddr == (void *)MAP_FAILED)
     return NULL;
-
 #endif /* MALLOC_STACK */
 
   return (char *)vaddr;