parisc: Mark jump_table naturally aligned
authorHelge Deller <deller@gmx.de>
Mon, 20 Nov 2023 22:14:39 +0000 (23:14 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Dec 2023 07:52:20 +0000 (08:52 +0100)
commit 07eecff8ae78df7f28800484d31337e1f9bfca3a upstream.

The jump_table stores two 32-bit words and one 32- (on 32-bit kernel)
or one 64-bit word (on 64-bit kernel).
Ensure that the last word is always 64-bit aligned on a 64-bit kernel
by aligning the whole structure on sizeof(long).

Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v6.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/parisc/include/asm/jump_label.h

index af2a598..9442879 100644 (file)
@@ -15,10 +15,12 @@ static __always_inline bool arch_static_branch(struct static_key *key, bool bran
        asm_volatile_goto("1:\n\t"
                 "nop\n\t"
                 ".pushsection __jump_table,  \"aw\"\n\t"
+                ".align %1\n\t"
                 ".word 1b - ., %l[l_yes] - .\n\t"
                 __stringify(ASM_ULONG_INSN) " %c0 - .\n\t"
                 ".popsection\n\t"
-                : :  "i" (&((char *)key)[branch]) :  : l_yes);
+                : : "i" (&((char *)key)[branch]), "i" (sizeof(long))
+                : : l_yes);
 
        return false;
 l_yes:
@@ -30,10 +32,12 @@ static __always_inline bool arch_static_branch_jump(struct static_key *key, bool
        asm_volatile_goto("1:\n\t"
                 "b,n %l[l_yes]\n\t"
                 ".pushsection __jump_table,  \"aw\"\n\t"
+                ".align %1\n\t"
                 ".word 1b - ., %l[l_yes] - .\n\t"
                 __stringify(ASM_ULONG_INSN) " %c0 - .\n\t"
                 ".popsection\n\t"
-                : :  "i" (&((char *)key)[branch]) :  : l_yes);
+                : : "i" (&((char *)key)[branch]), "i" (sizeof(long))
+                : : l_yes);
 
        return false;
 l_yes: