summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@c-s.fr>2018-10-01 12:21:10 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-05-16 19:45:18 +0200
commit5f3cf6b8221107302107068063e7fa7304f6639a (patch)
tree047a5699a8e80abba9e81854df6735fcc19cfae2 /arch
parent95100d253fee808b04d9070c1eedd897b49c7ef2 (diff)
downloadlinux-stable-5f3cf6b8221107302107068063e7fa7304f6639a.tar.gz
linux-stable-5f3cf6b8221107302107068063e7fa7304f6639a.tar.bz2
linux-stable-5f3cf6b8221107302107068063e7fa7304f6639a.zip
powerpc/lib: fix book3s/32 boot failure due to code patching
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>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/lib/code-patching.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
index 570c06a00db6..31d31a10f71f 100644
--- a/arch/powerpc/lib/code-patching.c
+++ b/arch/powerpc/lib/code-patching.c
@@ -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;
}