]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
powerpc/lib: fix book3s/32 boot failure due to code patching
authorChristophe Leroy <christophe.leroy@c-s.fr>
Mon, 1 Oct 2018 12:21:10 +0000 (12:21 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 May 2019 17:45:18 +0000 (19:45 +0200)
commit b45ba4a51cde29b2939365ef0c07ad34c8321789 upstream.

Commit 51c3c62b58b3 ("powerpc: Avoid code patching freed init
sections") accesses 'init_mem_is_free' flag too early, before the
kernel is relocated. This provokes early boot failure (before the
console is active).

As it is not necessary to do this verification that early, this
patch moves the test into patch_instruction() instead of
__patch_instruction().

This modification also has the advantage of avoiding unnecessary
remappings.

Fixes: 51c3c62b58b3 ("powerpc: Avoid code patching freed init sections")
Cc: stable@vger.kernel.org # 4.13+
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/powerpc/lib/code-patching.c

index 570c06a00db6d9f894704347887db53ca0ab3682..31d31a10f71f2acbeec3575464caec4158e8de6b 100644 (file)
@@ -28,7 +28,7 @@ int patch_instruction(unsigned int *addr, unsigned int instr)
        int err;
 
        /* Make sure we aren't patching a freed init section */
-       if (init_mem_is_free && is_init(addr)) {
+       if (*PTRRELOC(&init_mem_is_free) && is_init(addr)) {
                pr_debug("Skipping init section patching addr: 0x%px\n", addr);
                return 0;
        }