Last active
February 17, 2022 07:47
-
-
Save depressed-pho/a629247b48b3e6178e35a14c62e9d44f to your computer and use it in GitHub Desktop.
NetBSD: hinted mmap(2) without MAP_FIXED gives up too early
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% uname -a | |
NetBSD yukari.cielonegro.org 9.2 NetBSD 9.2 (GENERIC) #1: Wed Nov 24 12:01:38 JS | |
T 2021 [email protected]:/home/pho/sysbuild/amd64/obj/usr/src/sys/arch/ | |
amd64/compile/GENERIC amd64 | |
% ./a.out | |
page size: 4096 octets | |
length: 4096000 octets | |
mmap #0 succeeded: got 0x40000000 | |
mmap #1 succeeded: got 0x3fc18000 | |
mmap #2 succeeded: got 0x3f830000 | |
mmap #3 succeeded: got 0x3f448000 | |
mmap #4 succeeded: got 0x3f060000 | |
mmap #5 succeeded: got 0x3ec78000 | |
mmap #6 succeeded: got 0x3e890000 | |
mmap #7 succeeded: got 0x3e4a8000 | |
mmap #8 succeeded: got 0x3e0c0000 | |
mmap #9 succeeded: got 0x3dcd8000 | |
mmap #10 succeeded: got 0x3d8f0000 | |
mmap #11 succeeded: got 0x3d508000 | |
mmap #12 succeeded: got 0x3d120000 | |
mmap #13 succeeded: got 0x3cd38000 | |
mmap #14 succeeded: got 0x3c950000 | |
mmap #15 succeeded: got 0x3c568000 | |
mmap #16 succeeded: got 0x3c180000 | |
mmap #17 succeeded: got 0x3bd98000 | |
mmap #18 succeeded: got 0x3b9b0000 | |
mmap #19 succeeded: got 0x3b5c8000 | |
mmap #20 succeeded: got 0x3b1e0000 | |
mmap #21 succeeded: got 0x3adf8000 | |
mmap #22 succeeded: got 0x3aa10000 | |
mmap #23 succeeded: got 0x3a628000 | |
mmap #24 succeeded: got 0x3a240000 | |
mmap #25 succeeded: got 0x39e58000 | |
mmap #26 succeeded: got 0x39a70000 | |
mmap #27 succeeded: got 0x39688000 | |
mmap #28 succeeded: got 0x392a0000 | |
mmap #29 succeeded: got 0x38eb8000 | |
mmap #30 succeeded: got 0x38ad0000 | |
mmap #31 succeeded: got 0x386e8000 | |
mmap #32 succeeded: got 0x38300000 | |
mmap #33 succeeded: got 0x37f18000 | |
mmap #34 succeeded: got 0x37b30000 | |
mmap #35 succeeded: got 0x37748000 | |
mmap #36 succeeded: got 0x37360000 | |
mmap #37 succeeded: got 0x36f78000 | |
mmap #38 succeeded: got 0x36b90000 | |
mmap #39 succeeded: got 0x367a8000 | |
mmap #40 succeeded: got 0x363c0000 | |
mmap #41 succeeded: got 0x35fd8000 | |
mmap #42 succeeded: got 0x35bf0000 | |
mmap #43 succeeded: got 0x35808000 | |
mmap #44 succeeded: got 0x35420000 | |
mmap #45 succeeded: got 0x35038000 | |
mmap #46 succeeded: got 0x34c50000 | |
mmap #47 succeeded: got 0x34868000 | |
mmap #48 succeeded: got 0x34480000 | |
mmap #49 succeeded: got 0x34098000 | |
mmap #50 succeeded: got 0x33cb0000 | |
mmap #51 succeeded: got 0x338c8000 | |
mmap #52 succeeded: got 0x334e0000 | |
mmap #53 succeeded: got 0x330f8000 | |
mmap #54 succeeded: got 0x32d10000 | |
mmap #55 succeeded: got 0x32928000 | |
mmap #56 succeeded: got 0x32540000 | |
mmap #57 succeeded: got 0x32158000 | |
mmap #58 succeeded: got 0x31d70000 | |
mmap #59 succeeded: got 0x31988000 | |
mmap #60 succeeded: got 0x315a0000 | |
mmap #61 succeeded: got 0x311b8000 | |
mmap #62 succeeded: got 0x30dd0000 | |
mmap #63 succeeded: got 0x309e8000 | |
mmap #64 succeeded: got 0x30600000 | |
mmap #65 succeeded: got 0x30218000 | |
mmap #66 succeeded: got 0x2fe30000 | |
mmap #67 succeeded: got 0x2fa48000 | |
mmap #68 succeeded: got 0x2f660000 | |
mmap #69 succeeded: got 0x2f278000 | |
mmap #70 succeeded: got 0x2ee90000 | |
mmap #71 succeeded: got 0x2eaa8000 | |
mmap #72 succeeded: got 0x2e6c0000 | |
mmap #73 succeeded: got 0x2e2d8000 | |
mmap #74 succeeded: got 0x2def0000 | |
mmap #75 succeeded: got 0x2db08000 | |
mmap #76 succeeded: got 0x2d720000 | |
mmap #77 succeeded: got 0x2d338000 | |
mmap #78 succeeded: got 0x2cf50000 | |
mmap #79 succeeded: got 0x2cb68000 | |
mmap #80 succeeded: got 0x2c780000 | |
mmap #81 succeeded: got 0x2c398000 | |
mmap #82 succeeded: got 0x2bfb0000 | |
mmap #83 succeeded: got 0x2bbc8000 | |
mmap #84 succeeded: got 0x2b7e0000 | |
mmap #85 succeeded: got 0x2b3f8000 | |
mmap #86 succeeded: got 0x2b010000 | |
mmap #87 succeeded: got 0x2ac28000 | |
mmap #88 succeeded: got 0x2a840000 | |
mmap #89 succeeded: got 0x2a458000 | |
mmap #90 succeeded: got 0x2a070000 | |
mmap #91 succeeded: got 0x29c88000 | |
mmap #92 succeeded: got 0x298a0000 | |
mmap #93 succeeded: got 0x294b8000 | |
mmap #94 succeeded: got 0x290d0000 | |
mmap #95 succeeded: got 0x28ce8000 | |
mmap #96 succeeded: got 0x28900000 | |
mmap #97 succeeded: got 0x28518000 | |
mmap #98 succeeded: got 0x28130000 | |
mmap #99 succeeded: got 0x27d48000 | |
mmap #100 succeeded: got 0x27960000 | |
mmap #101 succeeded: got 0x27578000 | |
mmap #102 succeeded: got 0x27190000 | |
mmap #103 succeeded: got 0x26da8000 | |
mmap #104 succeeded: got 0x269c0000 | |
mmap #105 succeeded: got 0x265d8000 | |
mmap #106 succeeded: got 0x261f0000 | |
mmap #107 succeeded: got 0x25e08000 | |
mmap #108 succeeded: got 0x25a20000 | |
mmap #109 succeeded: got 0x25638000 | |
mmap #110 succeeded: got 0x25250000 | |
mmap #111 succeeded: got 0x24e68000 | |
mmap #112 succeeded: got 0x24a80000 | |
mmap #113 succeeded: got 0x24698000 | |
mmap #114 succeeded: got 0x242b0000 | |
mmap #115 succeeded: got 0x23ec8000 | |
mmap #116 succeeded: got 0x23ae0000 | |
mmap #117 succeeded: got 0x236f8000 | |
mmap #118 succeeded: got 0x23310000 | |
mmap #119 succeeded: got 0x22f28000 | |
mmap #120 succeeded: got 0x22b40000 | |
mmap #121 succeeded: got 0x22758000 | |
mmap #122 succeeded: got 0x22370000 | |
mmap #123 succeeded: got 0x21f88000 | |
mmap #124 succeeded: got 0x21ba0000 | |
mmap #125 succeeded: got 0x217b8000 | |
mmap #126 succeeded: got 0x213d0000 | |
mmap #127 succeeded: got 0x20fe8000 | |
mmap #128 succeeded: got 0x20c00000 | |
mmap #129 succeeded: got 0x20818000 | |
mmap #130 succeeded: got 0x20430000 | |
mmap #131 succeeded: got 0x20048000 | |
mmap #132 succeeded: got 0x1fc60000 | |
mmap #133 succeeded: got 0x1f878000 | |
mmap #134 succeeded: got 0x1f490000 | |
mmap #135 succeeded: got 0x1f0a8000 | |
mmap #136 succeeded: got 0x1ecc0000 | |
mmap #137 succeeded: got 0x1e8d8000 | |
mmap #138 succeeded: got 0x1e4f0000 | |
mmap #139 succeeded: got 0x1e108000 | |
mmap #140 succeeded: got 0x1dd20000 | |
mmap #141 succeeded: got 0x1d938000 | |
mmap #142 succeeded: got 0x1d550000 | |
mmap #143 succeeded: got 0x1d168000 | |
mmap #144 succeeded: got 0x1cd80000 | |
mmap #145 succeeded: got 0x1c998000 | |
mmap #146 succeeded: got 0x1c5b0000 | |
mmap #147 succeeded: got 0x1c1c8000 | |
mmap #148 succeeded: got 0x1bde0000 | |
mmap #149 succeeded: got 0x1b9f8000 | |
mmap #150 succeeded: got 0x1b610000 | |
mmap #151 succeeded: got 0x1b228000 | |
mmap #152 succeeded: got 0x1ae40000 | |
mmap #153 succeeded: got 0x1aa58000 | |
mmap #154 succeeded: got 0x1a670000 | |
mmap #155 succeeded: got 0x1a288000 | |
mmap #156 succeeded: got 0x19ea0000 | |
mmap #157 succeeded: got 0x19ab8000 | |
mmap #158 succeeded: got 0x196d0000 | |
mmap #159 succeeded: got 0x192e8000 | |
mmap #160 succeeded: got 0x18f00000 | |
mmap #161 succeeded: got 0x18b18000 | |
mmap #162 succeeded: got 0x18730000 | |
mmap #163 succeeded: got 0x18348000 | |
mmap #164 succeeded: got 0x17f60000 | |
mmap #165 succeeded: got 0x17b78000 | |
mmap #166 succeeded: got 0x17790000 | |
mmap #167 succeeded: got 0x173a8000 | |
mmap #168 succeeded: got 0x16fc0000 | |
mmap #169 succeeded: got 0x16bd8000 | |
mmap #170 succeeded: got 0x167f0000 | |
mmap #171 succeeded: got 0x16408000 | |
mmap #172 succeeded: got 0x16020000 | |
mmap #173 succeeded: got 0x15c38000 | |
mmap #174 succeeded: got 0x15850000 | |
mmap #175 succeeded: got 0x15468000 | |
mmap #176 succeeded: got 0x15080000 | |
mmap #177 succeeded: got 0x14c98000 | |
mmap #178 succeeded: got 0x148b0000 | |
mmap #179 succeeded: got 0x144c8000 | |
mmap #180 succeeded: got 0x140e0000 | |
mmap #181 succeeded: got 0x13cf8000 | |
mmap #182 succeeded: got 0x13910000 | |
mmap #183 succeeded: got 0x13528000 | |
mmap #184 succeeded: got 0x13140000 | |
mmap #185 succeeded: got 0x12d58000 | |
mmap #186 succeeded: got 0x12970000 | |
mmap #187 succeeded: got 0x12588000 | |
mmap #188 succeeded: got 0x121a0000 | |
mmap #189 succeeded: got 0x11db8000 | |
mmap #190 succeeded: got 0x119d0000 | |
mmap #191 succeeded: got 0x115e8000 | |
mmap #192 succeeded: got 0x11200000 | |
mmap #193 succeeded: got 0x10e18000 | |
mmap #194 succeeded: got 0x10a30000 | |
mmap #195 succeeded: got 0x10648000 | |
mmap #196 succeeded: got 0x10260000 | |
mmap #197 succeeded: got 0xfe78000 | |
mmap #198 succeeded: got 0xfa90000 | |
mmap #199 succeeded: got 0xf6a8000 | |
mmap #200 succeeded: got 0xf2c0000 | |
mmap #201 succeeded: got 0xeed8000 | |
mmap #202 succeeded: got 0xeaf0000 | |
mmap #203 succeeded: got 0xe708000 | |
mmap #204 succeeded: got 0xe320000 | |
mmap #205 succeeded: got 0xdf38000 | |
mmap #206 succeeded: got 0xdb50000 | |
mmap #207 succeeded: got 0xd768000 | |
mmap #208 succeeded: got 0xd380000 | |
mmap #209 succeeded: got 0xcf98000 | |
mmap #210 succeeded: got 0xcbb0000 | |
mmap #211 succeeded: got 0xc7c8000 | |
mmap #212 succeeded: got 0xc3e0000 | |
mmap #213 succeeded: got 0xbff8000 | |
mmap #214 succeeded: got 0xbc10000 | |
mmap #215 succeeded: got 0xb828000 | |
mmap #216 succeeded: got 0xb440000 | |
mmap #217 succeeded: got 0xb058000 | |
mmap #218 succeeded: got 0xac70000 | |
mmap #219 succeeded: got 0xa888000 | |
mmap #220 succeeded: got 0xa4a0000 | |
mmap #221 succeeded: got 0xa0b8000 | |
mmap #222 succeeded: got 0x9cd0000 | |
mmap #223 succeeded: got 0x98e8000 | |
mmap #224 succeeded: got 0x9500000 | |
mmap #225 succeeded: got 0x9118000 | |
mmap #226 succeeded: got 0x8d30000 | |
mmap #227 succeeded: got 0x8948000 | |
mmap #228 succeeded: got 0x8560000 | |
mmap #229 succeeded: got 0x8178000 | |
mmap #230 succeeded: got 0x7d90000 | |
mmap #231 succeeded: got 0x79a8000 | |
mmap #232 succeeded: got 0x75c0000 | |
mmap #233 succeeded: got 0x71d8000 | |
mmap #234 succeeded: got 0x6df0000 | |
mmap #235 succeeded: got 0x6a08000 | |
mmap #236 succeeded: got 0x6620000 | |
mmap #237 succeeded: got 0x6238000 | |
mmap #238 succeeded: got 0x5e50000 | |
mmap #239 succeeded: got 0x5a68000 | |
mmap #240 succeeded: got 0x5680000 | |
mmap #241 succeeded: got 0x5298000 | |
mmap #242 succeeded: got 0x4eb0000 | |
mmap #243 succeeded: got 0x4ac8000 | |
mmap #244 succeeded: got 0x46e0000 | |
mmap #245 succeeded: got 0x42f8000 | |
mmap #246 succeeded: got 0x3f10000 | |
mmap #247 succeeded: got 0x3b28000 | |
mmap #248 succeeded: got 0x3740000 | |
mmap #249 succeeded: got 0x3358000 | |
mmap #250 succeeded: got 0x2f70000 | |
mmap #251 succeeded: got 0x2b88000 | |
mmap #252 succeeded: got 0x27a0000 | |
mmap #253 succeeded: got 0x23b8000 | |
mmap #254 succeeded: got 0x1fd0000 | |
mmap #255 succeeded: got 0x1be8000 | |
mmap #256 succeeded: got 0x1800000 | |
mmap #257 succeeded: got 0x1418000 | |
mmap #258 succeeded: got 0x1030000 | |
mmap #259 succeeded: got 0xc48000 | |
mmap #260 succeeded: got 0x860000 | |
mmap #261 failed: Cannot allocate memory |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <errno.h> | |
#include <stdio.h> | |
#include <string.h> | |
#include <sys/mman.h> | |
#include <unistd.h> | |
static const int max_iterations = 1000; | |
static void* address_hint = (void*)0x40000000; /* Changing this to NULL causes the code to succeed */ | |
int main() { | |
const long page_size = sysconf(_SC_PAGESIZE); | |
printf("page size: %ld octets\n", page_size); | |
const long length = page_size * 1000; | |
printf("length: %ld octets\n", length); | |
for (int i = 0; i < max_iterations; i++) { | |
const void* ret = mmap(address_hint, length, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0); | |
if (ret == MAP_FAILED) { | |
printf("mmap #%d failed: %s\n", i, strerror(errno)); | |
return 1; | |
} | |
else { | |
printf("mmap #%d succeeded: got %p\n", i, ret); | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment