hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/tools/testing/selftests/proc/proc-self-map-files-002.c
....@@ -46,12 +46,13 @@
4646
4747 int main(void)
4848 {
49
- const unsigned int PAGE_SIZE = sysconf(_SC_PAGESIZE);
50
-#ifdef __arm__
51
- unsigned long va = 2 * PAGE_SIZE;
52
-#else
53
- unsigned long va = 0;
54
-#endif
49
+ const int PAGE_SIZE = sysconf(_SC_PAGESIZE);
50
+ /*
51
+ * va_max must be enough bigger than vm.mmap_min_addr, which is
52
+ * 64KB/32KB by default. (depends on CONFIG_LSM_MMAP_MIN_ADDR)
53
+ */
54
+ const unsigned long va_max = 1UL << 20;
55
+ unsigned long va;
5556 void *p;
5657 int fd;
5758 unsigned long a, b;
....@@ -60,10 +61,13 @@
6061 if (fd == -1)
6162 return 1;
6263
63
- p = mmap((void *)va, PAGE_SIZE, PROT_NONE, MAP_PRIVATE|MAP_FILE|MAP_FIXED, fd, 0);
64
- if (p == MAP_FAILED) {
65
- if (errno == EPERM)
66
- return 2;
64
+ for (va = 0; va < va_max; va += PAGE_SIZE) {
65
+ p = mmap((void *)va, PAGE_SIZE, PROT_NONE, MAP_PRIVATE|MAP_FILE|MAP_FIXED, fd, 0);
66
+ if (p == (void *)va)
67
+ break;
68
+ }
69
+ if (va == va_max) {
70
+ fprintf(stderr, "error: mmap doesn't like you\n");
6771 return 1;
6872 }
6973