diff options
author | Sven Schnelle <svens@linux.ibm.com> | 2021-02-10 15:39:19 +0300 |
---|---|---|
committer | Vasily Gorbik <gor@linux.ibm.com> | 2021-02-13 19:17:53 +0300 |
commit | 64985c3a223d15f151204b3aa37e587b9466378d (patch) | |
tree | d69076d3eb1e09285a65f1f1454519b1b5bd8f96 /arch/s390/kernel/setup.c | |
parent | b0d31159a46787380353426faaad8febc9bef009 (diff) | |
download | linux-64985c3a223d15f151204b3aa37e587b9466378d.tar.xz |
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 <svens@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Diffstat (limited to 'arch/s390/kernel/setup.c')
-rw-r--r-- | arch/s390/kernel/setup.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index c7feda84edbb..6b004940c4dc 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; } |