Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp8128imd; Fri, 2 Nov 2018 16:34:16 -0700 (PDT) X-Google-Smtp-Source: AJdET5efdR/ofjC5oYgqCF/RwY53e5FhxLPTgd5GYiWaflhSOHDSgBxLoTSjN4mphC5ENgqHn8GX X-Received: by 2002:a17:902:61:: with SMTP id 88-v6mr13678037pla.189.1541201656567; Fri, 02 Nov 2018 16:34:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541201656; cv=none; d=google.com; s=arc-20160816; b=dEaG2xq0c0fLXlvWba2doptNeG3pxs+GD1ScritIJWbDGZZS+yStAWUa9fY5E26/nM FeEvG6jI1/r6rY+sPbCz640sfOEpRr8QJyrh4SNNhJKLpFTXmvNBF7fQfiqLxxT/EE+V Fl24fgnN3A5RWRW5pHBbeQw5Pzrmiv337f7bzSTT+/vP9ewnUBiMcADytNzmoDLDooGf 0/fLhQ0YPGfq62g0UuDYPJIXs5Qa0QHTHBHTOtjvf7jj0w288B6iSGkF75CMhLoiulQW jThJpm9AaEmzWy6fQ9Qw6IcXiYtvjpCb3WH0N8hfykwGwJK//c8vqzhQ0EIL0nXLNBZX v8fQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=mepvPDg0zJKg1ud91zWNgTwGLolqDdYNWOLJmOKqmsw=; b=WyW/PFq8aF+BN6SvFGTZo2zgAu4/Eb2qAC72zA8+howP+kWjO4LHWND02mia3vXIof HZuIImJspXsMRakgKtaGJkv4xAnS0fl/Xud9r/jchucUgcn8t+zzg7BXTAuAnXC8Tpro GZu5bnB231diArZFpMYH6QuBlmrkRWW6V7e0BEyTPUTp1DbwXWsKiDmjJqmSugFmniDi x6OxLMsCsBlx2L14Zk3k4aNBokacaDdn1sT2A8Ua8qszOiblrYEB8kq0FqL6+xVWyXB4 hCQYVdgXlmLDT+XH6IEQSK60V5ehPlV2/ETxffphXPX4NbUk+PYuBhOBtpSJw5QKR8A0 pABg== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=vmware.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m14-v6si37561080pgd.282.2018.11.02.16.34.01; Fri, 02 Nov 2018 16:34:16 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728318AbeKCIky (ORCPT + 99 others); Sat, 3 Nov 2018 04:40:54 -0400 Received: from ex13-edg-ou-001.vmware.com ([208.91.0.189]:8611 "EHLO EX13-EDG-OU-001.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726729AbeKCIky (ORCPT ); Sat, 3 Nov 2018 04:40:54 -0400 Received: from sc9-mailhost2.vmware.com (10.113.161.72) by EX13-EDG-OU-001.vmware.com (10.113.208.155) with Microsoft SMTP Server id 15.0.1156.6; Fri, 2 Nov 2018 16:31:32 -0700 Received: from sc2-haas01-esx0118.eng.vmware.com (sc2-haas01-esx0118.eng.vmware.com [10.172.44.118]) by sc9-mailhost2.vmware.com (Postfix) with ESMTP id 94A57B14CC; Fri, 2 Nov 2018 19:31:42 -0400 (EDT) From: Nadav Amit To: Ingo Molnar CC: , , "H. Peter Anvin" , Thomas Gleixner , Borislav Petkov , Dave Hansen , Nadav Amit , Andy Lutomirski , Kees Cook , Peter Zijlstra , Dave Hansen , Masami Hiramatsu Subject: [PATCH v3 2/7] x86/jump_label: Use text_poke_early() during early_init Date: Fri, 2 Nov 2018 16:29:41 -0700 Message-ID: <20181102232946.98461-3-namit@vmware.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181102232946.98461-1-namit@vmware.com> References: <20181102232946.98461-1-namit@vmware.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: None (EX13-EDG-OU-001.vmware.com: namit@vmware.com does not designate permitted sender hosts) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There is no apparent reason not to use text_poke_early() while we are during early-init and we do not patch code that might be on the stack (i.e., we'll return to the middle of the patched code). This appears to be the case of jump-labels, so do so. This is required for the next patches that would set a temporary mm for patching, which is initialized after some static-keys are enabled/disabled. Cc: Andy Lutomirski Cc: Kees Cook Cc: Peter Zijlstra Cc: Dave Hansen Cc: Masami Hiramatsu Signed-off-by: Nadav Amit --- arch/x86/kernel/jump_label.c | 8 +++++++- include/linux/kernel.h | 1 + init/main.c | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c index aac0c1f7e354..367c1d0c20a3 100644 --- a/arch/x86/kernel/jump_label.c +++ b/arch/x86/kernel/jump_label.c @@ -52,7 +52,13 @@ static void __ref __jump_label_transform(struct jump_entry *entry, jmp.offset = jump_entry_target(entry) - (jump_entry_code(entry) + JUMP_LABEL_NOP_SIZE); - if (early_boot_irqs_disabled) + /* + * As long as we are in early boot, we can use text_poke_early(), which + * is more efficient: the memory was still not marked as read-only (it + * is only marked after poking_init()). This also prevents us from using + * text_poke() before poking_init() is called. + */ + if (!early_boot_done) poker = text_poke_early; if (type == JUMP_LABEL_JMP) { diff --git a/include/linux/kernel.h b/include/linux/kernel.h index d6aac75b51ba..3e86ff3c64c4 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -564,6 +564,7 @@ extern unsigned long get_taint(void); extern int root_mountflags; extern bool early_boot_irqs_disabled; +extern u8 early_boot_done; /* * Values used for system_state. Ordering of the states must not be changed diff --git a/init/main.c b/init/main.c index a664246450d1..b0fa26637496 100644 --- a/init/main.c +++ b/init/main.c @@ -117,6 +117,8 @@ extern void radix_tree_init(void); */ bool early_boot_irqs_disabled __read_mostly; +u8 early_boot_done __read_mostly; + enum system_states system_state __read_mostly; EXPORT_SYMBOL(system_state); @@ -735,6 +737,8 @@ asmlinkage __visible void __init start_kernel(void) efi_free_boot_services(); } + early_boot_done = true; + /* Do the rest non-__init'ed, we're now alive */ rest_init(); } -- 2.17.1