Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp2341773imm; Thu, 11 Oct 2018 08:47:50 -0700 (PDT) X-Google-Smtp-Source: ACcGV62BC3Iq2q9MQqWhl6ZFLQAKqDG3cm5Kkn3FKpAPhLcX4YOLvWkWiQdOAoG6kmykTxs0gzTu X-Received: by 2002:a62:6b0a:: with SMTP id g10-v6mr2072868pfc.174.1539272870710; Thu, 11 Oct 2018 08:47:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539272870; cv=none; d=google.com; s=arc-20160816; b=H0PNOrbrhCVA0B7H6s3JzrIx0WQRPRV8gk2js01Pqu0UOOS7PHMzQSWRlY+IJQXP9a nLuv1zBYdbXi93/mR+uV0bQ6I6TIKGNHqJLeYLwOmphVSBSWrdY6yQLkL/z1VtadKJ4+ hG4L3xltT4gW2O3JjgzmmwIO8mJYFIIVUcPOtCWt3/cCHh9MJ0AvHkjsZ2fRcsmOnvY9 bsVv71StHFb+11Ma6k3/+CBZMASRxYaJC6f7W4V3jx/W55QDienbQHg2M6tL6IKHO/Ge 2SBKyQGI6rTFV5rKzb+TZLriHHhG1yqqddT8s8O9gJ/kN8HRNifasQrQ65dyU5CUwVFk u8OQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=FTUiFPhD/IIVHXhW26Ar76BLH+lHREV7D1G9IclNL6w=; b=Xy31HlD1LLID9JnYF4G48fgnmtyT1bIyiTLvz781dihODlGctJniXxjyZ8U89Spdna Y8ZP54I2jWrPVSNGUb9fR/gVLZtY3aZ5CNX2d+8gXksPj3cxL8RL1FxEuUY1X8dkKrUl tlBSWY1IcgChDn2Z67p4ZahaRUWST5E03SmEfTda+MOgtD0GjK9awCHKQuYAt1kk6CtJ 8fYZPtHEsfiSVXDwVxYauzUOljsk8gB9vD2e6vUtLrd4cG3TARyPM0oq63pleKOP8kDW kMpbrKRAjgblN6pcGPWVYxv2DXyAxyVw/acWHnQrgxtCxfmKHxDmsctABbLilCWLzAsz nwVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="W8/SrpWc"; 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 h23-v6si3674962pli.433.2018.10.11.08.47.35; Thu, 11 Oct 2018 08:47:50 -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; dkim=pass header.i=@kernel.org header.s=default header.b="W8/SrpWc"; 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 S1731547AbeJKXOH (ORCPT + 99 others); Thu, 11 Oct 2018 19:14:07 -0400 Received: from mail.kernel.org ([198.145.29.99]:46960 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726700AbeJKXOG (ORCPT ); Thu, 11 Oct 2018 19:14:06 -0400 Received: from localhost (ip-213-127-77-176.ip.prioritytelecom.net [213.127.77.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0FD7A213A2; Thu, 11 Oct 2018 15:46:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1539272780; bh=G0uoaUDUxND654t5BaMUOVWvuhUdZkj8weVxmbG4gKY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W8/SrpWcbLbHWRg1zEa+NlYWTEaasuCrsdUw3XOSN7w3a9m5NR9eBmODrBv26e5wT vyZmMuisMtaLhbGtGFOffgMODJ27LVxSG7GbKmvEL12nkFGtfAocMXOR2RS+1iSZyR hcufMUT2gLXQ1+53eOxMSxS7JryPHFn0oJSlyNo4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christophe Leroy , Michael Ellerman Subject: [PATCH 4.14 35/45] powerpc/lib: fix book3s/32 boot failure due to code patching Date: Thu, 11 Oct 2018 17:40:02 +0200 Message-Id: <20181011152510.450697383@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181011152508.885515042@linuxfoundation.org> References: <20181011152508.885515042@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Christophe Leroy 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 Signed-off-by: Michael Ellerman Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/lib/code-patching.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) --- a/arch/powerpc/lib/code-patching.c +++ b/arch/powerpc/lib/code-patching.c @@ -28,12 +28,6 @@ static int __patch_instruction(unsigned { 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(unsig 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 @@ out: } #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)