1*4239b822Smillert /* $OpenBSD: mmap_size.c,v 1.3 2015/02/06 23:21:58 millert Exp $ */ 200fc33e2Sotto 300fc33e2Sotto /* 400fc33e2Sotto * Public domain. 2005, Otto Moerbeek <otto@drijf.net> 500fc33e2Sotto */ 600fc33e2Sotto 700fc33e2Sotto #include <sys/types.h> 800fc33e2Sotto #include <sys/mman.h> 900fc33e2Sotto #include <err.h> 10*4239b822Smillert #include <stdint.h> 1100fc33e2Sotto #include <stdio.h> 12*4239b822Smillert #include <stdlib.h> 1300fc33e2Sotto 1400fc33e2Sotto void f(size_t sz)1500fc33e2Sottof(size_t sz) 1600fc33e2Sotto { 1700fc33e2Sotto char *p; 1800fc33e2Sotto p = mmap(NULL, sz, PROT_READ|PROT_WRITE, 1900fc33e2Sotto MAP_ANON|MAP_PRIVATE, -1, (off_t)0); 2000fc33e2Sotto 2100fc33e2Sotto if (p == MAP_FAILED) 2200fc33e2Sotto return; 2300fc33e2Sotto 2400fc33e2Sotto if (sz > 0) { 2500fc33e2Sotto p[0] = 0; 2600fc33e2Sotto p[sz / 2] = 0; 2700fc33e2Sotto p[sz - 1] = 0; 2800fc33e2Sotto } 2900fc33e2Sotto munmap(p, sz); 3000fc33e2Sotto } 3100fc33e2Sotto 3200fc33e2Sotto int main()3300fc33e2Sottomain() 3400fc33e2Sotto { 3500fc33e2Sotto size_t i; 3600fc33e2Sotto 3700fc33e2Sotto for (i = 0; i < 0x2000; i += 0x100) { 3800fc33e2Sotto f(i); 3900fc33e2Sotto f(-i); 40*4239b822Smillert f(SIZE_MAX/2 - 0x1000); 4100fc33e2Sotto } 4200fc33e2Sotto return (0); 4300fc33e2Sotto } 44