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;
|