|
14 | 14 |
|
15 | 15 | #include <asm/ptrace.h>
|
16 | 16 |
|
17 |
| -#ifdef CONFIG_64BIT |
18 |
| -#define DEFAULT_MAP_WINDOW (UL(1) << (MMAP_VA_BITS - 1)) |
19 |
| -#define STACK_TOP_MAX TASK_SIZE_64 |
20 |
| - |
21 | 17 | #define arch_get_mmap_end(addr, len, flags) \
|
22 | 18 | ({ \
|
23 | 19 | unsigned long mmap_end; \
|
24 | 20 | typeof(addr) _addr = (addr); \
|
25 |
| - if ((_addr) == 0 || (IS_ENABLED(CONFIG_COMPAT) && is_compat_task())) \ |
| 21 | + if ((_addr) == 0 || \ |
| 22 | + (IS_ENABLED(CONFIG_COMPAT) && is_compat_task()) || \ |
| 23 | + ((_addr + len) > BIT(VA_BITS - 1))) \ |
26 | 24 | mmap_end = STACK_TOP_MAX; \
|
27 |
| - else if ((_addr) >= VA_USER_SV57) \ |
28 |
| - mmap_end = STACK_TOP_MAX; \ |
29 |
| - else if ((((_addr) >= VA_USER_SV48)) && (VA_BITS >= VA_BITS_SV48)) \ |
30 |
| - mmap_end = VA_USER_SV48; \ |
31 | 25 | else \
|
32 |
| - mmap_end = VA_USER_SV39; \ |
| 26 | + mmap_end = (_addr + len); \ |
33 | 27 | mmap_end; \
|
34 | 28 | })
|
35 | 29 |
|
|
39 | 33 | typeof(addr) _addr = (addr); \
|
40 | 34 | typeof(base) _base = (base); \
|
41 | 35 | unsigned long rnd_gap = DEFAULT_MAP_WINDOW - (_base); \
|
42 |
| - if ((_addr) == 0 || (IS_ENABLED(CONFIG_COMPAT) && is_compat_task())) \ |
| 36 | + if ((_addr) == 0 || \ |
| 37 | + (IS_ENABLED(CONFIG_COMPAT) && is_compat_task()) || \ |
| 38 | + ((_addr + len) > BIT(VA_BITS - 1))) \ |
43 | 39 | mmap_base = (_base); \
|
44 |
| - else if (((_addr) >= VA_USER_SV57) && (VA_BITS >= VA_BITS_SV57)) \ |
45 |
| - mmap_base = VA_USER_SV57 - rnd_gap; \ |
46 |
| - else if ((((_addr) >= VA_USER_SV48)) && (VA_BITS >= VA_BITS_SV48)) \ |
47 |
| - mmap_base = VA_USER_SV48 - rnd_gap; \ |
48 | 40 | else \
|
49 |
| - mmap_base = VA_USER_SV39 - rnd_gap; \ |
| 41 | + mmap_base = (_addr + len) - rnd_gap; \ |
50 | 42 | mmap_base; \
|
51 | 43 | })
|
52 | 44 |
|
| 45 | +#ifdef CONFIG_64BIT |
| 46 | +#define DEFAULT_MAP_WINDOW (UL(1) << (MMAP_VA_BITS - 1)) |
| 47 | +#define STACK_TOP_MAX TASK_SIZE_64 |
53 | 48 | #else
|
54 | 49 | #define DEFAULT_MAP_WINDOW TASK_SIZE
|
55 | 50 | #define STACK_TOP_MAX TASK_SIZE
|
|
0 commit comments