malloc_ulimit1.c revision 1.5
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. */ 26char *malloc_options = "jj"; 27 28int 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