1 /* $OpenBSD: malloc_ulimit1.c,v 1.5 2019/06/12 11:31:36 bluhm Exp $ */ 2 3 /* Public Domain, 2006, Otto Moerbeek <otto@drijf.net> */ 4 5 #include <sys/types.h> 6 #include <sys/time.h> 7 #include <sys/resource.h> 8 #include <err.h> 9 #include <stdlib.h> 10 #include <stdio.h> 11 12 /* 13 * This code tries to trigger the case present in -current as of April 14 * 2006) where the allocation of the region itself succeeds, but the 15 * page dir entry pages fails. 16 * This in turn trips a "hole in directories" error. 17 * Having a large (512M) ulimit -m helps a lot in triggering the 18 * problem. Note that you may need to run this test multiple times to 19 * see the error. 20 */ 21 22 #define STARTI 1300 23 #define FACTOR 1024 24 25 /* This test takes forever with junking turned on. */ 26 char *malloc_options = "jj"; 27 28 int main()29main() 30 { 31 struct rlimit lim; 32 size_t sz; 33 int i; 34 void *p; 35 36 if (getrlimit(RLIMIT_DATA, &lim) == -1) 37 err(1, "getrlimit"); 38 39 sz = lim.rlim_cur / FACTOR; 40 41 for (i = STARTI; i >= 0; i--) { 42 size_t len = (sz-i) * FACTOR; 43 p = malloc(len); 44 free(p); 45 free(malloc(4096)); 46 } 47 return (0); 48 } 49