Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp828046rwd; Thu, 18 May 2023 04:41:11 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6TSn++DbCdUW854GvAFxuYPCNeiGnpNFY1xKpVhzZr+2ScFwf0g6W8E12NahB8dwjB8Ruw X-Received: by 2002:a05:6a20:d90a:b0:104:c2c:52ed with SMTP id jd10-20020a056a20d90a00b001040c2c52edmr1840780pzb.34.1684410071153; Thu, 18 May 2023 04:41:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684410071; cv=none; d=google.com; s=arc-20160816; b=tAoJUl3UHkcXAa3MpNyU7RtBcOpS/sbuY7IP9rhhJ2V8hcM4yR0Bp16DUCpKWwploQ Zg4PYZxvvCefmXqUz5It/AO8MreZc0p8IoQGHqL+Sns6H+HR2e7E6Vkpz6Uh+mjAzwVu VFAl+BNh7yqW098nAhfd15evdmbWdwI30FWczcAAewh8uEY3yFiYNaVIDoMvQDCPJ+Uk 2OZTGjaS08Y+7P4ILzyApbe6c3i2NLffus7w/LiAK9z9pq9X4PsrR1exykOCtMemqIr/ 4D7QB1kbvQjEWsfpiYlcmHL959FFWd5Z6eAaO/3x/bl7PdhXlC7zSfe4bTUY4C87j90F HNLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=t9feQN/oPOdQozTWLbO33Z/MGivxNLBiUuNSc3B3xDE=; b=aDlxtlzrTRl1ZZ48MqrkgW0vsPSCAyNhsbxxM8w/96Ne06ndO3fG5gzbq7Y9ZsFFTc xTi0yLTwKSYDTA1BtaCZIljDlV4ick7ZAhqy+ILbPxG+0gOWygfg6RTrq4x94q7KLea3 hOys9CCxp+RjYuTWFFnA5U8wGWCMg7BpWEqA2CSdkZ3JQGoZ34/eeXFkC4uLiKcj7ywR dzlT+PDfkYJQcpBD8cN9h5HqT/A7KjmPHptJKcJhtrjWibJb3QlR4zY6J3LQo603llxK dwVtyWoSKetwNbVJPH0qb/BGNjkRBaJsRUif4rbKsazC88bbCQ2TfQRFapied0oX/OvS 9adA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=IpwdkzFI; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i7-20020a636d07000000b0050fad5c9f36si1235737pgc.354.2023.05.18.04.40.56; Thu, 18 May 2023 04:41:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=IpwdkzFI; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231264AbjERLJe (ORCPT + 99 others); Thu, 18 May 2023 07:09:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231191AbjERLJT (ORCPT ); Thu, 18 May 2023 07:09:19 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F3192681; Thu, 18 May 2023 04:08:37 -0700 (PDT) Date: Thu, 18 May 2023 11:08:03 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1684408084; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=t9feQN/oPOdQozTWLbO33Z/MGivxNLBiUuNSc3B3xDE=; b=IpwdkzFIzbuBd3Ax5wIaVfpqzTlgOjKaY01f2YHv3F9nv3edpaDqDlVrZRrTk/BS217Yfm YsZvxWDjAbnoLiMpdKVhNW5Uo9sIMrlR6eqkonj0frW3zyI9l9H1lE/SJ1Yv6GuM149NbR jXMZLAcQxjqGCnHOCIbuCyBaHdbq5iBchEZkGdOcoetQY8BRImYjJlVcGi2qej+o2MWRoa 4ihqbxEZFxw8dKXLh3LGjTnCRbOZXZ5ADdYCEsdBqn9ZX5BAoeO3c/51V829AmgdQTG4f4 Z3QRmUO+R1VMagJzxbq1eGY352ZvWg+qjGsSUnGsiH6SMtNKJiuHxH9aMKlTjA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1684408084; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=t9feQN/oPOdQozTWLbO33Z/MGivxNLBiUuNSc3B3xDE=; b=6NOCXx0zMgaO/wVbQA7s8ScMJbOhvoh5GZaqrnHdTW9QzADfRr9IZ/YG5u6afIBRXKz7me LMr4d0ORn+U366Bg== From: "tip-bot2 for ndesaulniers@google.com" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: objtool/core] start_kernel: Add __no_stack_protector function attribute Cc: Nathan Chancellor , Michael Ellerman , Miguel Ojeda , "Peter Zijlstra (Intel)" , Nick Desaulniers , Josh Poimboeuf , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20230412-no_stackp-v2-1-116f9fe4bbe7@google.com> References: <20230412-no_stackp-v2-1-116f9fe4bbe7@google.com> MIME-Version: 1.0 Message-ID: <168440808395.404.16801982965854981978.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the objtool/core branch of tip: Commit-ID: 514ca14ed5444b911de59ed3381dfd195d99fe4b Gitweb: https://git.kernel.org/tip/514ca14ed5444b911de59ed3381dfd195d99fe4b Author: ndesaulniers@google.com AuthorDate: Mon, 17 Apr 2023 15:00:05 -07:00 Committer: Josh Poimboeuf CommitterDate: Tue, 16 May 2023 06:28:15 -07:00 start_kernel: Add __no_stack_protector function attribute Back during the discussion of commit a9a3ed1eff36 ("x86: Fix early boot crash on gcc-10, third try") we discussed the need for a function attribute to control the omission of stack protectors on a per-function basis; at the time Clang had support for no_stack_protector but GCC did not. This was fixed in gcc-11. Now that the function attribute is available, let's start using it. Callers of boot_init_stack_canary need to use this function attribute unless they're compiled with -fno-stack-protector, otherwise the canary stored in the stack slot of the caller will differ upon the call to boot_init_stack_canary. This will lead to a call to __stack_chk_fail() then panic. Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94722 Link: https://lore.kernel.org/all/20200316130414.GC12561@hirez.programming.kicks-ass.net/ Tested-by: Nathan Chancellor Acked-by: Michael Ellerman (powerpc) Acked-by: Miguel Ojeda Acked-by: Peter Zijlstra (Intel) Signed-off-by: Nick Desaulniers Link: https://lore.kernel.org/r/20230412-no_stackp-v2-1-116f9fe4bbe7@google.com Signed-off-by: Josh Poimboeuf Signed-off-by: ndesaulniers@google.com --- arch/powerpc/kernel/smp.c | 1 + include/linux/compiler_attributes.h | 12 ++++++++++++ init/main.c | 3 ++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 265801a..6903a72 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -1605,6 +1605,7 @@ static void add_cpu_to_masks(int cpu) } /* Activate a secondary processor. */ +__no_stack_protector void start_secondary(void *unused) { unsigned int cpu = raw_smp_processor_id(); diff --git a/include/linux/compiler_attributes.h b/include/linux/compiler_attributes.h index e659cb6..8486476 100644 --- a/include/linux/compiler_attributes.h +++ b/include/linux/compiler_attributes.h @@ -256,6 +256,18 @@ #define __noreturn __attribute__((__noreturn__)) /* + * Optional: only supported since GCC >= 11.1, clang >= 7.0. + * + * gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute + * clang: https://clang.llvm.org/docs/AttributeReference.html#no-stack-protector-safebuffers + */ +#if __has_attribute(__no_stack_protector__) +# define __no_stack_protector __attribute__((__no_stack_protector__)) +#else +# define __no_stack_protector +#endif + +/* * Optional: not supported by gcc. * * clang: https://clang.llvm.org/docs/AttributeReference.html#overloadable diff --git a/init/main.c b/init/main.c index af50044..c445c1f 100644 --- a/init/main.c +++ b/init/main.c @@ -877,7 +877,8 @@ static void __init print_unknown_bootoptions(void) memblock_free(unknown_options, len); } -asmlinkage __visible void __init __no_sanitize_address __noreturn start_kernel(void) +asmlinkage __visible __init __no_sanitize_address __noreturn __no_stack_protector +void start_kernel(void) { char *command_line; char *after_dashes;