From patchwork Wed Aug 14 17:00:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 171320 Delivered-To: patch@linaro.org Received: by 2002:a92:d204:0:0:0:0:0 with SMTP id y4csp1099600ily; Wed, 14 Aug 2019 10:09:13 -0700 (PDT) X-Google-Smtp-Source: APXvYqxWQauVBvjzzODkucsZ2d42n6slAgM5HmBDolktjMKiu5bnULF+GMFQLd4KaJ2G+yAx9l+2 X-Received: by 2002:a63:7887:: with SMTP id t129mr160613pgc.309.1565802552979; Wed, 14 Aug 2019 10:09:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565802552; cv=none; d=google.com; s=arc-20160816; b=oLpt/VOckQZ7RPJGZt9QajTDe/ZVLUNlQ7kXbT4Q44C5pF7CRcflnprj3ICVMn0Z49 PM4vofPvXah1ktyV1/YN01QrXDR2LDEVw6nVXxx4qWhVJstr+CcZVkf44pc0vuRlaL2y ckyhBJ/dWaWlqyrz5ffn7Junp/SZyQiMkOQuVzIQ0e9Ab2j5azOiYufjHpRxbdbwTlPO Ic8iDAZd6eG7TKq5j2juL4TAmq2LNsiQm8P4zs4N2F7KIlMohnXG9yg0bD/Ab00yC7VK XiR+KzY0JH8+7pUZ02Y+KEmzYckzk0xsMoZhW4MrJj1ZIDJw0wS6VNrubZhklBmSsWv8 QWgg== 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=atcWzVa56mN9n9pKb1QgE1XCg9IG3B3XPvVyJomjAmU=; b=K/7968EIM5mijquCPyFdvdc0qGuBseOZ4STwCBXSZSY3h9mt0H6eQnA+p13fFuamof kiSLYWhLybSK5+mYdSnVNwR29vSO7dM58OMKfpPmm1OSxnWSIl3kUXg3NvYgTeRE2JfY 217nYyVt0MEGwVq895i/OpMFKTLEdo/+yuw9N4jK2s6B+irN40tPsAf+xCaFqrn6KZEA NURPhuzDbzfVlKBj55f6mCcsh8Oszt1NRFO7tfSaYyk0k2pNdZeopR4wzzMLs/jmlURv b/fknYuld1rvmoCzxqKcazY6EwNvuwFDn45RF7fcF75uDsxxOzDeLdmCcmSVxLl8fsmZ +Ufg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=icz3PmbB; 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 l186si170873pgd.455.2019.08.14.10.09.12; Wed, 14 Aug 2019 10:09:12 -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=icz3PmbB; 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 S1730294AbfHNRJL (ORCPT + 28 others); Wed, 14 Aug 2019 13:09:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:59384 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730273AbfHNRJH (ORCPT ); Wed, 14 Aug 2019 13:09:07 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 2628A2084D; Wed, 14 Aug 2019 17:09:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1565802546; bh=667TcVdpDhNaEjohdrqBizGLS8ipZ7Vkf9Lqs08EpV8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=icz3PmbBtiESRc4TuO4TBVG+MRvlO42h9DvR1pnQnhSExArciciRf+/d03EC2vsNO 8Bb/55QRHAG/8zPGUn6v36npv1GaKMDHQSOVaT/h7EOJnNUXOdm8WcAz+NtcmFc2b/ IGCbevT+K1ux2ZBi63XPscXCU/s+njNOUfoE58jQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vaibhav Rustagi , Peter Zijlstra , Thomas Gleixner , Nick Desaulniers Subject: [PATCH 4.19 23/91] x86/purgatory: Use CFLAGS_REMOVE rather than reset KBUILD_CFLAGS Date: Wed, 14 Aug 2019 19:00:46 +0200 Message-Id: <20190814165750.700710357@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190814165748.991235624@linuxfoundation.org> References: <20190814165748.991235624@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Nick Desaulniers commit b059f801a937d164e03b33c1848bb3dca67c0b04 upstream. KBUILD_CFLAGS is very carefully built up in the top level Makefile, particularly when cross compiling or using different build tools. Resetting KBUILD_CFLAGS via := assignment is an antipattern. The comment above the reset mentions that -pg is problematic. Other Makefiles use `CFLAGS_REMOVE_file.o = $(CC_FLAGS_FTRACE)` when CONFIG_FUNCTION_TRACER is set. Prefer that pattern to wiping out all of the important KBUILD_CFLAGS then manually having to re-add them. Seems also that __stack_chk_fail references are generated when using CONFIG_STACKPROTECTOR or CONFIG_STACKPROTECTOR_STRONG. Fixes: 8fc5b4d4121c ("purgatory: core purgatory functionality") Reported-by: Vaibhav Rustagi Suggested-by: Peter Zijlstra Suggested-by: Thomas Gleixner Signed-off-by: Nick Desaulniers Signed-off-by: Thomas Gleixner Tested-by: Vaibhav Rustagi Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/20190807221539.94583-2-ndesaulniers@google.com Signed-off-by: Greg Kroah-Hartman --- arch/x86/purgatory/Makefile | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) --- a/arch/x86/purgatory/Makefile +++ b/arch/x86/purgatory/Makefile @@ -17,11 +17,34 @@ KCOV_INSTRUMENT := n # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That # in turn leaves some undefined symbols like __fentry__ in purgatory and not -# sure how to relocate those. Like kexec-tools, use custom flags. +# sure how to relocate those. +ifdef CONFIG_FUNCTION_TRACER +CFLAGS_REMOVE_sha256.o += $(CC_FLAGS_FTRACE) +CFLAGS_REMOVE_purgatory.o += $(CC_FLAGS_FTRACE) +CFLAGS_REMOVE_string.o += $(CC_FLAGS_FTRACE) +CFLAGS_REMOVE_kexec-purgatory.o += $(CC_FLAGS_FTRACE) +endif -KBUILD_CFLAGS := -fno-strict-aliasing -Wall -Wstrict-prototypes -fno-zero-initialized-in-bss -fno-builtin -ffreestanding -c -Os -mcmodel=large -KBUILD_CFLAGS += -m$(BITS) -KBUILD_CFLAGS += $(call cc-option,-fno-PIE) +ifdef CONFIG_STACKPROTECTOR +CFLAGS_REMOVE_sha256.o += -fstack-protector +CFLAGS_REMOVE_purgatory.o += -fstack-protector +CFLAGS_REMOVE_string.o += -fstack-protector +CFLAGS_REMOVE_kexec-purgatory.o += -fstack-protector +endif + +ifdef CONFIG_STACKPROTECTOR_STRONG +CFLAGS_REMOVE_sha256.o += -fstack-protector-strong +CFLAGS_REMOVE_purgatory.o += -fstack-protector-strong +CFLAGS_REMOVE_string.o += -fstack-protector-strong +CFLAGS_REMOVE_kexec-purgatory.o += -fstack-protector-strong +endif + +ifdef CONFIG_RETPOLINE +CFLAGS_REMOVE_sha256.o += $(RETPOLINE_CFLAGS) +CFLAGS_REMOVE_purgatory.o += $(RETPOLINE_CFLAGS) +CFLAGS_REMOVE_string.o += $(RETPOLINE_CFLAGS) +CFLAGS_REMOVE_kexec-purgatory.o += $(RETPOLINE_CFLAGS) +endif $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE $(call if_changed,ld) From patchwork Wed Aug 14 17:01:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 171323 Delivered-To: patch@linaro.org Received: by 2002:a92:d204:0:0:0:0:0 with SMTP id y4csp1105261ily; Wed, 14 Aug 2019 10:13:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqwlQDNjlSu8OB8JJFUGjgCTPup6OVFbMRXCLgoLx59ac5CT7jBLR3cR8PNwMAdflEWoKEM7 X-Received: by 2002:a17:902:9348:: with SMTP id g8mr475090plp.18.1565802740939; Wed, 14 Aug 2019 10:12:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565802740; cv=none; d=google.com; s=arc-20160816; b=M53KngHLE47VUR1wEPZx2Ev4+68nTV0NDfxWLb+KohEMYIMLkjnui4S3yoCzL0HeHG UhvuzwCMvE2HHQ1wct6Eb3EVIsc1UNXIm4n/igFevIy6ovYexKc3eaTwpHDbrYaABdJF 5a1UQDOggV3/zQKZHi9D+/g7MhY3a3Jz6kh61pesq3DZUtfALKCJikS9mdS0Y2W30ga9 MPs9GCW5WvP/MK3gQWL89MKFQOC7QU/NgrVs5hqIXpxqxMA2TM0WddJIJNljspnHd12y IL7DSfGypzC5YVX9GaQgk5BBchT2/fsqE6/XLJZ/vkWebQ9CzkI/BHEz1eiWs7/MGJAQ hgHg== 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=ZEIa4h5fIYdUfhLGXSzD0xXGgcpW1HPxDzrwKn3WXxw=; b=faimJGcQsRnxaYu90gL9wV50U1i3OLgRDoS/RlqdnhtvgtmxSIPR7BtwtQo0a6lK37 ttjGUB+X5kZBT9OJeMhYFXC7TOX5zqRjS+sQD1E1JF9lUeKLpXmIwCk8jt4NSIIxtnAy d86MIW8pbbJDekX8GebjyKv/47fZ6/SJt6gOxoxgcRFkd/LUemUQihBVnhqBwUNcY/5h 9KSJp9IEYDvxKfuTH+hwEISpSNiJAma8/WAo5iCi6Gk8uRhI/AjawMtk4Iqjq1BH8Pxm nWhzRSOxsZrnJcqR225KSthMaVVMSFmhDFhoeESKI/sJtjPRechm+hEepDijXcfRDo1Z OLFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=o3KbLzhX; 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 h65si82484pfe.216.2019.08.14.10.12.20; Wed, 14 Aug 2019 10:12:20 -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=o3KbLzhX; 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 S1730704AbfHNRMT (ORCPT + 28 others); Wed, 14 Aug 2019 13:12:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:36052 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730698AbfHNRMR (ORCPT ); Wed, 14 Aug 2019 13:12:17 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 95FCD216F4; Wed, 14 Aug 2019 17:12:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1565802736; bh=SKkNANZr+ygJCo5isJhEgLS5Oabwbiqh+RoOuJkiSlw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o3KbLzhXXD39EX7oHGgFyDE3xoqlr+BWDX8QhnmkJdRFmv8Lp2HNq5hS4Qmc6d8PX aPqmkkqRurWbe7YvZDv5Xk4k9uG1A4z2byNdrm8EJclF4LLUVeGEk7uZbBZsCWxqVU b/GijwFhAjMLKatdzmJajKrW6cSixFUgQN/DB4JI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vaibhav Rustagi , Alistair Delva , Nick Desaulniers , Thomas Gleixner , Manoj Gupta Subject: [PATCH 4.19 71/91] x86/purgatory: Do not use __builtin_memcpy and __builtin_memset Date: Wed, 14 Aug 2019 19:01:34 +0200 Message-Id: <20190814165752.710198889@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190814165748.991235624@linuxfoundation.org> References: <20190814165748.991235624@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Nick Desaulniers commit 4ce97317f41d38584fb93578e922fcd19e535f5b upstream. Implementing memcpy and memset in terms of __builtin_memcpy and __builtin_memset is problematic. GCC at -O2 will replace calls to the builtins with calls to memcpy and memset (but will generate an inline implementation at -Os). Clang will replace the builtins with these calls regardless of optimization level. $ llvm-objdump -dr arch/x86/purgatory/string.o | tail 0000000000000339 memcpy: 339: 48 b8 00 00 00 00 00 00 00 00 movabsq $0, %rax 000000000000033b: R_X86_64_64 memcpy 343: ff e0 jmpq *%rax 0000000000000345 memset: 345: 48 b8 00 00 00 00 00 00 00 00 movabsq $0, %rax 0000000000000347: R_X86_64_64 memset 34f: ff e0 Such code results in infinite recursion at runtime. This is observed when doing kexec. Instead, reuse an implementation from arch/x86/boot/compressed/string.c. This requires to implement a stub function for warn(). Also, Clang may lower memcmp's that compare against 0 to bcmp's, so add a small definition, too. See also: commit 5f074f3e192f ("lib/string.c: implement a basic bcmp") Fixes: 8fc5b4d4121c ("purgatory: core purgatory functionality") Reported-by: Vaibhav Rustagi Debugged-by: Vaibhav Rustagi Debugged-by: Manoj Gupta Suggested-by: Alistair Delva Signed-off-by: Nick Desaulniers Signed-off-by: Thomas Gleixner Tested-by: Vaibhav Rustagi Cc: stable@vger.kernel.org Link: https://bugs.chromium.org/p/chromium/issues/detail?id=984056 Link: https://lkml.kernel.org/r/20190807221539.94583-1-ndesaulniers@google.com Signed-off-by: Greg Kroah-Hartman --- arch/x86/boot/string.c | 8 ++++++++ arch/x86/purgatory/Makefile | 3 +++ arch/x86/purgatory/purgatory.c | 6 ++++++ arch/x86/purgatory/string.c | 25 ------------------------- 4 files changed, 17 insertions(+), 25 deletions(-) --- a/arch/x86/boot/string.c +++ b/arch/x86/boot/string.c @@ -34,6 +34,14 @@ int memcmp(const void *s1, const void *s return diff; } +/* + * Clang may lower `memcmp == 0` to `bcmp == 0`. + */ +int bcmp(const void *s1, const void *s2, size_t len) +{ + return memcmp(s1, s2, len); +} + int strcmp(const char *str1, const char *str2) { const unsigned char *s1 = (const unsigned char *)str1; --- a/arch/x86/purgatory/Makefile +++ b/arch/x86/purgatory/Makefile @@ -6,6 +6,9 @@ purgatory-y := purgatory.o stack.o setup targets += $(purgatory-y) PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y)) +$(obj)/string.o: $(srctree)/arch/x86/boot/compressed/string.c FORCE + $(call if_changed_rule,cc_o_c) + $(obj)/sha256.o: $(srctree)/lib/sha256.c FORCE $(call if_changed_rule,cc_o_c) --- a/arch/x86/purgatory/purgatory.c +++ b/arch/x86/purgatory/purgatory.c @@ -70,3 +70,9 @@ void purgatory(void) } copy_backup_region(); } + +/* + * Defined in order to reuse memcpy() and memset() from + * arch/x86/boot/compressed/string.c + */ +void warn(const char *msg) {} --- a/arch/x86/purgatory/string.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Simple string functions. - * - * Copyright (C) 2014 Red Hat Inc. - * - * Author: - * Vivek Goyal - * - * This source code is licensed under the GNU General Public License, - * Version 2. See the file COPYING for more details. - */ - -#include - -#include "../boot/string.c" - -void *memcpy(void *dst, const void *src, size_t len) -{ - return __builtin_memcpy(dst, src, len); -} - -void *memset(void *dst, int c, size_t len) -{ - return __builtin_memset(dst, c, len); -}