From: Sven Schnelle Date: Wed, 10 Feb 2021 12:39:19 +0000 (+0100) Subject: s390: use WRITE_ONCE when re-allocating async stack X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=64985c3a223d15f151204b3aa37e587b9466378d;p=linux.git s390: use WRITE_ONCE when re-allocating async stack The code does: S390_lowcore.async_stack = new + STACK_INIT_OFFSET; But the compiler is free to first assign one value and add the other value later. If a IRQ would be coming in between these two operations, it would run with an invalid stack. Prevent this by using WRITE_ONCE. Signed-off-by: Sven Schnelle Signed-off-by: Vasily Gorbik --- diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index c7feda84edbb0..6b004940c4dc3 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c @@ -346,7 +346,7 @@ static int __init async_stack_realloc(void) new = stack_alloc(); if (!new) panic("Couldn't allocate async stack"); - S390_lowcore.async_stack = new + STACK_INIT_OFFSET; + WRITE_ONCE(S390_lowcore.async_stack, new + STACK_INIT_OFFSET); free_pages(old, THREAD_SIZE_ORDER); return 0; }