Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp647557imm; Mon, 1 Oct 2018 16:20:13 -0700 (PDT) X-Google-Smtp-Source: ACcGV60jE+5FbdqVxgr39Akf4pbMZk1Lslp+w/TDjcYvC1LVmU7HAtpt+EMDID7522RAqasaoj6D X-Received: by 2002:a63:7f0e:: with SMTP id a14-v6mr12157479pgd.296.1538436013941; Mon, 01 Oct 2018 16:20:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538436013; cv=none; d=google.com; s=arc-20160816; b=t+e7/hkmVVmkBWAIvzwl+Ym3bIhmk9wwg7zmsFuxYukwsQOFXkjxT13ie6u/F8TZFK gW1JPzA6i/GPme0PuYelPyK2rmVK0C/wnKstT2EIgKHL4zJ0W6S1aK05BZUKBwBxcp6W oooeqEmrBc4ox9XEKVDgXCKcL+lk0TAomhbjHUR6GC3oNOQdVrFFEOv/P3OjGu1sbqxE GELp3hRpCHrOWZngHEU81KgUE10wn57ofEugKsW1mK9L59TpqTaOpN5reKmpXs6RZ3wb aBI0hwodMDbSW87pDs9A4CjOAuyOAT8M27qkgTu/N2orBDUc09vfom6Av4sWdVLXPozl r3yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :references:in-reply-to:date:cc:to:from:subject:message-id; bh=QTCEUuB+5RRuMG9Fvh/8qEDIJ1TOVBK4t9QL9OLspxA=; b=qWpCh1/H8YleelPEg5mxpclWRpss6yB3s70FuhWUh9EzCbxJHktc+rxn0iAiVQ8pqY c10I36F7mpJqNImjRE3UMhNsg8Xm6iUhntG2AF3jcfJgjDhP7CTJAODI7OaxYnlEDcl8 xLy79EgIVDGKo+LbCOdrCNnDhMOIS0KneuDS6JclTFigvyfq2DYy1566zdSyyXzvkQhA bFetj+ITvrp3dc9pbQyB2FpDJaXOnQxQItFBrjlhxFsiRShtuXHDizCLa86X01V+Y2JR XQsAv8I2bJpTYu2IJAMv71xhVyxfmMpHnq0Fij74b0JFMS/RAILBTbLrJ1CTnsGh2YdJ Vaig== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a11-v6si13699568plp.225.2018.10.01.16.19.56; Mon, 01 Oct 2018 16:20:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726374AbeJBGAC convert rfc822-to-8bit (ORCPT + 99 others); Tue, 2 Oct 2018 02:00:02 -0400 Received: from ozlabs.org ([203.11.71.1]:58571 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725936AbeJBGAC (ORCPT ); Tue, 2 Oct 2018 02:00:02 -0400 Received: from localhost.localdomain (localhost [127.0.0.1]) by ozlabs.org (Postfix) with ESMTP id 42PJCV4K3Sz9s3l; Tue, 2 Oct 2018 09:19:50 +1000 (AEST) Received: by localhost.localdomain (Postfix, from userid 1000) id 872E9EE78BF; Tue, 2 Oct 2018 09:19:50 +1000 (AEST) Message-ID: <095ba37e883c0d2d13b442185289552ab6cd7107.camel@neuling.org> Subject: Re: [PATCH] powerpc/lib: fix book3s/32 boot failure due to code patching From: Michael Neuling To: Christophe Leroy , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Date: Tue, 02 Oct 2018 09:19:50 +1000 In-Reply-To: <6acad0a13b7f6c2845b2022737c6a11a445ed3c2.1538394860.git.christophe.leroy@c-s.fr> References: <6acad0a13b7f6c2845b2022737c6a11a445ed3c2.1538394860.git.christophe.leroy@c-s.fr> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2018-10-01 at 12:21 +0000, Christophe Leroy wrote: > 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") > Signed-off-by: Christophe Leroy Thanks Acked-by: Michael Neuling The original patch was also marked for stable so we should do the same here. Cc: stable@vger.kernel.org # 4.13+ > --- > arch/powerpc/lib/code-patching.c | 20 ++++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) > > 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)