s390/nospec: Correct modules thunk offset calculation
authorVasily Gorbik <gor@linux.ibm.com>
Wed, 17 Jan 2024 10:50:46 +0000 (11:50 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 17 Apr 2024 11:38:02 +0000 (13:38 +0200)
Fix offset calculation when branch target is more then 2Gb away.

Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/kernel/nospec-branch.c

index d1b16d83e49ade48ada34328b70c926748041812..9b8c24ebb00858561df634ac3a17124d53bc92e9 100644 (file)
@@ -114,10 +114,10 @@ static void __init_or_module __nospec_revert(s32 *start, s32 *end)
                        type = BRASL_EXPOLINE;  /* brasl instruction */
                else
                        continue;
-               thunk = instr + (*(int *)(instr + 2)) * 2;
+               thunk = instr + (long)(*(int *)(instr + 2)) * 2;
                if (thunk[0] == 0xc6 && thunk[1] == 0x00)
                        /* exrl %r0,<target-br> */
-                       br = thunk + (*(int *)(thunk + 2)) * 2;
+                       br = thunk + (long)(*(int *)(thunk + 2)) * 2;
                else
                        continue;
                if (br[0] != 0x07 || (br[1] & 0xf0) != 0xf0)