* Re: FAILED: patch "[PATCH] powerpc/lib: fix book3s/32 boot failure due to code patching" failed to apply to 4.18-stable tree
2018-10-11 6:16 FAILED: patch "[PATCH] powerpc/lib: fix book3s/32 boot failure due to code patching" failed to apply to 4.18-stable tree gregkh
@ 2018-10-11 6:29 ` Christophe LEROY
2018-10-11 9:41 ` Greg KH
0 siblings, 1 reply; 3+ messages in thread
From: Christophe LEROY @ 2018-10-11 6:29 UTC (permalink / raw)
To: gregkh, mpe; +Cc: stable
Greg,
You said in an previous email (below) that you had it queue for 4.18,
was in a discution about the application of 51c3c62b58b3
Are you trying to apply twice ?
Thanks
Christophe
Le 11/10/2018 � 08:16, gregkh@linuxfoundation.org a �crit�:
>
> The patch below does not apply to the 4.18-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@vger.kernel.org>.
>
> thanks,
>
> greg k-h
>
Le 08/10/2018 � 15:29, Greg KH a �crit :
> On Sun, Oct 07, 2018 at 09:22:34AM +0200, Christophe LEROY wrote:
>>
>>
>> Le 02/10/2018 � 15:22, Greg KH a �crit :
>>> On Tue, Oct 02, 2018 at 02:24:32PM +0200, Christophe LEROY wrote:
>>>> Hello,
>>>>
>>>> This patch breaks the boot on book3S/32. It shouldn't be applied
without the
>>>> following fix:
>>>>
>>>> https://patchwork.ozlabs.org/patch/977195/
>>>
>>> Ok, now dropped, if someone could remind me when this goes in to pull
>>> both of them in, that would be great.
>>>
>>
>>
>> Hi,
>>
>> The fix is now in the mainline, commit
>> b45ba4a51cde29b2939365ef0c07ad34c8321789
>>
>> So you can fetch both to stable tress.
>
> Now queued up to 4.18 only, 4.14 did not apply :(
>
> thanks,
>
> greg k-h
>
> ------------------ original commit in Linus's tree ------------------
>
> From b45ba4a51cde29b2939365ef0c07ad34c8321789 Mon Sep 17 00:00:00 2001
> From: Christophe Leroy <christophe.leroy@c-s.fr>
> Date: Mon, 1 Oct 2018 12:21:10 +0000
> Subject: [PATCH] powerpc/lib: fix book3s/32 boot failure due to code patching
>
> 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>
>
> diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
> index 6ae2777c220d..5ffee298745f 100644
> --- a/arch/powerpc/lib/code-patching.c
> +++ b/arch/powerpc/lib/code-patching.c
> @@ -28,12 +28,6 @@ static int __patch_instruction(unsigned int *exec_addr, unsigned int instr,
> {
> int err;
>
> - /* Make sure we aren't patching a freed init section */
> - if (init_mem_is_free && init_section_contains(exec_addr, 4)) {
> - pr_debug("Skipping init section patching addr: 0x%px\n", exec_addr);
> - return 0;
> - }
> -
> __put_user_size(instr, patch_addr, 4, err);
> if (err)
> return err;
> @@ -148,7 +142,7 @@ static inline int unmap_patch_area(unsigned long addr)
> return 0;
> }
>
> -int patch_instruction(unsigned int *addr, unsigned int instr)
> +static int do_patch_instruction(unsigned int *addr, unsigned int instr)
> {
> int err;
> unsigned int *patch_addr = NULL;
> @@ -188,12 +182,22 @@ int patch_instruction(unsigned int *addr, unsigned int instr)
> }
> #else /* !CONFIG_STRICT_KERNEL_RWX */
>
> -int patch_instruction(unsigned int *addr, unsigned int instr)
> +static int do_patch_instruction(unsigned int *addr, unsigned int instr)
> {
> return raw_patch_instruction(addr, instr);
> }
>
> #endif /* CONFIG_STRICT_KERNEL_RWX */
> +
> +int patch_instruction(unsigned int *addr, unsigned int instr)
> +{
> + /* Make sure we aren't patching a freed init section */
> + if (init_mem_is_free && init_section_contains(addr, 4)) {
> + pr_debug("Skipping init section patching addr: 0x%px\n", addr);
> + return 0;
> + }
> + return do_patch_instruction(addr, instr);
> +}
> NOKPROBE_SYMBOL(patch_instruction);
>
> int patch_branch(unsigned int *addr, unsigned long target, int flags)
>
^ permalink raw reply [flat|nested] 3+ messages in thread