Make sure compiler won't do weird things with limits. E.g. fetching them twice may return 2 different values after writable limits are implemented. Signed-off-by: Jiri Slaby <jslaby@xxxxxxxxxx> Cc: James Morris <jmorris@xxxxxxxxx> Cc: Heiko Carstens <heiko.carstens@xxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Martin Schwidefsky <schwidefsky@xxxxxxxxxx> Cc: Heiko Carstens <heiko.carstens@xxxxxxxxxx> Cc: linux390@xxxxxxxxxx Cc: linux-s390@xxxxxxxxxxxxxxx --- arch/s390/mm/mmap.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c index f4558cc..90d3216 100644 --- a/arch/s390/mm/mmap.c +++ b/arch/s390/mm/mmap.c @@ -40,7 +40,8 @@ static inline unsigned long mmap_base(void) { - unsigned long gap = current->signal->rlim[RLIMIT_STACK].rlim_cur; + unsigned long gap = ACCESS_ONCE(current->signal-> + rlim[RLIMIT_STACK].rlim_cur); if (gap < MIN_GAP) gap = MIN_GAP; @@ -59,9 +60,11 @@ static inline int mmap_is_legacy(void) if (!is_compat_task()) return 1; #endif + if (ACCESS_ONCE(current->signal->rlim[RLIMIT_STACK].rlim_cur) == + RLIM_INFINITY) + return 1; return sysctl_legacy_va_layout || - (current->personality & ADDR_COMPAT_LAYOUT) || - current->signal->rlim[RLIMIT_STACK].rlim_cur == RLIM_INFINITY; + (current->personality & ADDR_COMPAT_LAYOUT); } #ifndef CONFIG_64BIT -- 1.6.4.2 -- To unsubscribe from this list: send the line "unsubscribe linux-s390" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html