Received: by 10.213.65.68 with SMTP id h4csp1169698imn; Wed, 21 Mar 2018 04:32:17 -0700 (PDT) X-Google-Smtp-Source: AG47ELswEx5zu/uPDqBiFhAaTQkkHUD9LPntMd5nF1mW9ItKaaXUbKzPgtqih2sed+uvGU3NSCS1 X-Received: by 10.99.102.132 with SMTP id a126mr14422028pgc.385.1521631937880; Wed, 21 Mar 2018 04:32:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521631937; cv=none; d=google.com; s=arc-20160816; b=bhPC8Z1PqZVo9NSr1rx8KRZi7k0w2SKzvfgr/K3VPtyxJNJ6UwhfZdTTyhf9ugRIW6 uKXMBIwCdj6aWpoLPEqrc1Dj62Ot7BIgOHr+CIAqaUyO3VMDhMGHGkOb54EtRouFuamE a5ty8TQgH/PnUK1H6FmMHTU3C7QYlCiTbt4OzNJqRcuNL6mcPyK/UblZF+Uurt98vALV Qjq8DO82U3ImmbmzuSx3aHs39+Ob+HuoGIbkZoXnNxK6PbB7KGeipvlswxRwcktPX0fN rMR9WjRLv0zOxR6lF4jFfpyOxvE0fzsPFf6Q6EY4hjRcZb8wzHLoSf21BbkNdmDUeXW3 wuXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:references:in-reply-to:date :subject:cc:to:from:arc-authentication-results; bh=t6F5rnfmxzS3rukUeJo76YljZcqMHAbsdCigulJnFCQ=; b=REvKb4yKtYhQ2h5z4VZVUjsLBgmWftHJf45uL/yM8JNzAbvN7GPhtB+ORZsC5KqnSp pjV1At1lmmtdDpngJswvhinzsKwJ7MSDQf+2g141m0dfq6CmjcSHpStXwkpmKacED5WL g5HWy/8aGH2y8ThAeBP2D2EB+tVb6F7QljsK9zwPq39kxFN5ZkOHVujXaTiQ8Efn20Tn cKCpnWauKKWSQ1+Fga+9LNOrV3ZKcLKyuMkyOa0SgwFY/wJUmMGEuBcvsXvFnrdAZ4Qi mSBztXzPVuL9QEj5XZ27r8t3FnnpD7obL1dqFuK7bpe8nkZebahDexc786gBl0qfyY1v RnnA== 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=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b9-v6si3600731pls.108.2018.03.21.04.32.03; Wed, 21 Mar 2018 04:32:17 -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=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752129AbeCUL32 (ORCPT + 99 others); Wed, 21 Mar 2018 07:29:28 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:44448 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751899AbeCUL2T (ORCPT ); Wed, 21 Mar 2018 07:28:19 -0400 Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w2LBNWME009045 for ; Wed, 21 Mar 2018 07:28:18 -0400 Received: from e06smtp13.uk.ibm.com (e06smtp13.uk.ibm.com [195.75.94.109]) by mx0a-001b2d01.pphosted.com with ESMTP id 2gunbxjss1-1 (version=TLSv1.2 cipher=AES256-SHA256 bits=256 verify=NOT) for ; Wed, 21 Mar 2018 07:28:17 -0400 Received: from localhost by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 21 Mar 2018 11:28:12 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp13.uk.ibm.com (192.168.101.143) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 21 Mar 2018 11:28:08 -0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w2LBS8TN49283312; Wed, 21 Mar 2018 11:28:08 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E214B4C046; Wed, 21 Mar 2018 11:21:15 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7769B4C044; Wed, 21 Mar 2018 11:21:15 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 21 Mar 2018 11:21:15 +0000 (GMT) From: Philipp Rudo To: kexec@lists.infradead.org, linux-s390@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Eric Biederman , Vivek Goyal , Michael Ellerman , Thiago Jung Bauermann , Martin Schwidefsky , Heiko Carstens , Andrew Morton , x86@kernel.org, Dave Young , AKASHI Takahiro , Ingo Molnar Subject: [PATCH v2 11/11] kexec_file: Move purgatories sha256 to common code Date: Wed, 21 Mar 2018 12:27:51 +0100 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20180321112751.22196-1-prudo@linux.vnet.ibm.com> References: <20180321112751.22196-1-prudo@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18032111-0012-0000-0000-000005C1B40B X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18032111-0013-0000-0000-0000193DD66A Message-Id: <20180321112751.22196-12-prudo@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-03-21_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1803210139 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The code to verify the new kernels sha digest is applicable for all architectures. Move it to common code. One problem is the string.c implementation on x86. Currently sha256 includes x86/boot/string.h which defines memcpy and memset to be gcc builtins. By moving the sha256 implementation to common code and changing the include to linux/string.h both functions are no longer defined. Thus definitions have to be provided in x86/purgatory/string.c Signed-off-by: Philipp Rudo --- arch/x86/purgatory/Makefile | 3 +++ arch/x86/purgatory/purgatory.c | 2 +- arch/x86/purgatory/string.c | 12 ++++++++++++ {arch/x86/purgatory => include/linux}/sha256.h | 11 ++++++++++- {arch/x86/purgatory => lib}/sha256.c | 4 ++-- 5 files changed, 28 insertions(+), 4 deletions(-) rename {arch/x86/purgatory => include/linux}/sha256.h (62%) rename {arch/x86/purgatory => lib}/sha256.c (99%) diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile index 2f15a2ac4209..414eed6b5065 100644 --- a/arch/x86/purgatory/Makefile +++ b/arch/x86/purgatory/Makefile @@ -6,6 +6,9 @@ purgatory-y := purgatory.o stack.o setup-x86_$(BITS).o sha256.o entry64.o string targets += $(purgatory-y) PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y)) +$(obj)/sha256.o: $(srctree)/lib/sha256.c + $(call if_changed_rule,cc_o_c) + LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined -nostdlib -z nodefaultlib targets += purgatory.ro diff --git a/arch/x86/purgatory/purgatory.c b/arch/x86/purgatory/purgatory.c index 470edad96bb9..025c34ac0d84 100644 --- a/arch/x86/purgatory/purgatory.c +++ b/arch/x86/purgatory/purgatory.c @@ -11,9 +11,9 @@ */ #include +#include #include -#include "sha256.h" #include "../boot/string.h" unsigned long purgatory_backup_dest __section(.kexec-purgatory); diff --git a/arch/x86/purgatory/string.c b/arch/x86/purgatory/string.c index d886b1fa36f0..795ca4f2cb3c 100644 --- a/arch/x86/purgatory/string.c +++ b/arch/x86/purgatory/string.c @@ -10,4 +10,16 @@ * 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); +} diff --git a/arch/x86/purgatory/sha256.h b/include/linux/sha256.h similarity index 62% rename from arch/x86/purgatory/sha256.h rename to include/linux/sha256.h index 2867d9825a57..244fe01a65fb 100644 --- a/arch/x86/purgatory/sha256.h +++ b/include/linux/sha256.h @@ -13,9 +13,18 @@ #include #include +/* + * Stand-alone implementation of the SHA256 algorithm. It is designed to + * have as little dependencies as possible so it can be used in the + * kexec_file purgatory. In other cases you should use the implementation in + * crypto/. + * + * For details see lib/sha256.c + */ + extern int sha256_init(struct sha256_state *sctx); extern int sha256_update(struct sha256_state *sctx, const u8 *input, - unsigned int length); + unsigned int length); extern int sha256_final(struct sha256_state *sctx, u8 *hash); #endif /* SHA256_H */ diff --git a/arch/x86/purgatory/sha256.c b/lib/sha256.c similarity index 99% rename from arch/x86/purgatory/sha256.c rename to lib/sha256.c index 548ca675a14a..4400c832e2aa 100644 --- a/arch/x86/purgatory/sha256.c +++ b/lib/sha256.c @@ -16,9 +16,9 @@ */ #include +#include +#include #include -#include "sha256.h" -#include "../boot/string.h" static inline u32 Ch(u32 x, u32 y, u32 z) { -- 2.13.5