From patchwork Thu Apr 18 13:39:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gilad Ben-Yossef X-Patchwork-Id: 162500 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp763267jan; Thu, 18 Apr 2019 06:42:39 -0700 (PDT) X-Google-Smtp-Source: APXvYqzrSqZjbAXbEAriVUM0Tq+uFpsim3+aUzSasubjqs5gRlwdD+tosPOirQvm6xi9B9x8GzPX X-Received: by 2002:a62:14c3:: with SMTP id 186mr97457056pfu.21.1555594959066; Thu, 18 Apr 2019 06:42:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555594959; cv=none; d=google.com; s=arc-20160816; b=J7yJCoL4oNW+z90WvRkAEgU7lGb0CBhDYtVGOCX7gY9aCFCkBwRAALSnI56u25LoET FZB47vxsTbNsDYzgk4phcRmyo6fXjGvlf2RdRZD/6CpvpL6Gv/WeFDhuHcmqfc9qgNC/ KdJQH71i1wm/V0HVKoEGaqvzND0g0uUq5RgJ6vxWwEof7Mog+1MHvUGhnhzhDs0MytbQ RQwVb/L9yK3Mv2tinjTZFmzfVTDTEoBd6JgESoRPtu2LRepncA5+OQVda8sCNQC5/ydf ifG54rDhDVXBWWteLKj6B4JfE/ZdvZuHfV5jkPPS/+9jTIx6K+hWmY6uSjoGwOHDxLBj maIg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=e8uPONe+8HkpiZiQcNdctbOGFKDDfUjdu2VE+3R7oWU=; b=qaX//Pu3McJe7lm2XfK7X4TaFzyJe9yOGS/ZZBH6laj/+JDizqE6tkaC4T8GCt6p7Z 5ft9pWDwSmVu40Pt+IfESB/2eIPaQ2WvrQeERapvEjcLEvJOA2yDNrz22EVWZueepLQ8 4NDpi/zG2P5XWBB2bTcUAL1hoFX9UDVzSg+JPIljNi4LpuDxoBCqpk8cNwIo46vaHopr Fv2bM9SDf408w4twvQIr1mn9JWFWaTkW+d37F6noRFSXZPItzG35FMY60nTeUe4/alkP 1I6SjnRaBztbU/JZYuRSWvLBXIrbYne4uGP1nER+AkJeQp2RAFMFrmZ65StK8lYz52T+ QKQQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-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 h73si2410180pfj.220.2019.04.18.06.42.38; Thu, 18 Apr 2019 06:42:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-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 stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389512AbfDRNmg (ORCPT + 14 others); Thu, 18 Apr 2019 09:42:36 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:33806 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389054AbfDRNmf (ORCPT ); Thu, 18 Apr 2019 09:42:35 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 63EBE1688; Thu, 18 Apr 2019 06:42:35 -0700 (PDT) Received: from e110176-lin.kfn.arm.com (e110176-lin.kfn.arm.com [10.50.4.178]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id BBE623F5AF; Thu, 18 Apr 2019 06:42:33 -0700 (PDT) From: Gilad Ben-Yossef To: Herbert Xu , "David S. Miller" Cc: Ofir Drang , stable@vger.kernel.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 34/35] crypto: ccree: add function to handle cryptocell tee fips error Date: Thu, 18 Apr 2019 16:39:09 +0300 Message-Id: <20190418133913.9122-35-gilad@benyossef.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190418133913.9122-1-gilad@benyossef.com> References: <20190418133913.9122-1-gilad@benyossef.com> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Ofir Drang Adds function that checks if cryptocell tee fips error occurred and in such case triggers system error through kernel panic. Change fips function to use this new routine. Signed-off-by: Ofir Drang Signed-off-by: Gilad Ben-Yossef Cc: stable@vger.kernel.org # v4.19+ --- drivers/crypto/ccree/cc_fips.c | 23 +++++++++++++++-------- drivers/crypto/ccree/cc_fips.h | 2 ++ 2 files changed, 17 insertions(+), 8 deletions(-) -- 2.21.0 diff --git a/drivers/crypto/ccree/cc_fips.c b/drivers/crypto/ccree/cc_fips.c index 4a67248f5625..5ad3ffb7acaa 100644 --- a/drivers/crypto/ccree/cc_fips.c +++ b/drivers/crypto/ccree/cc_fips.c @@ -70,20 +70,28 @@ static inline void tee_fips_error(struct device *dev) dev_err(dev, "TEE reported error!\n"); } +/* + * This function check if cryptocell tee fips error occurred + * and in such case triggers system error + */ +void cc_tee_handle_fips_error(struct cc_drvdata *p_drvdata) +{ + struct device *dev = drvdata_to_dev(p_drvdata); + + if (!cc_get_tee_fips_status(p_drvdata)) + tee_fips_error(dev); +} + /* Deferred service handler, run as interrupt-fired tasklet */ static void fips_dsr(unsigned long devarg) { struct cc_drvdata *drvdata = (struct cc_drvdata *)devarg; - struct device *dev = drvdata_to_dev(drvdata); - u32 irq, state, val; + u32 irq, val; irq = (drvdata->irq & (CC_GPR0_IRQ_MASK)); if (irq) { - state = cc_ioread(drvdata, CC_REG(GPR_HOST)); - - if (state != (CC_FIPS_SYNC_TEE_STATUS | CC_FIPS_SYNC_MODULE_OK)) - tee_fips_error(dev); + cc_tee_handle_fips_error(drvdata); } /* after verifing that there is nothing to do, @@ -111,8 +119,7 @@ int cc_fips_init(struct cc_drvdata *p_drvdata) dev_dbg(dev, "Initializing fips tasklet\n"); tasklet_init(&fips_h->tasklet, fips_dsr, (unsigned long)p_drvdata); - if (!cc_get_tee_fips_status(p_drvdata)) - tee_fips_error(dev); + cc_tee_handle_fips_error(p_drvdata); return 0; } diff --git a/drivers/crypto/ccree/cc_fips.h b/drivers/crypto/ccree/cc_fips.h index 2c287faf10ff..fc33eeb4d566 100644 --- a/drivers/crypto/ccree/cc_fips.h +++ b/drivers/crypto/ccree/cc_fips.h @@ -18,6 +18,7 @@ int cc_fips_init(struct cc_drvdata *p_drvdata); void cc_fips_fini(struct cc_drvdata *drvdata); void fips_handler(struct cc_drvdata *drvdata); void cc_set_ree_fips_status(struct cc_drvdata *drvdata, bool ok); +void cc_tee_handle_fips_error(struct cc_drvdata *p_drvdata); #else /* CONFIG_CRYPTO_FIPS */ @@ -30,6 +31,7 @@ static inline void cc_fips_fini(struct cc_drvdata *drvdata) {} static inline void cc_set_ree_fips_status(struct cc_drvdata *drvdata, bool ok) {} static inline void fips_handler(struct cc_drvdata *drvdata) {} +static inline void cc_tee_handle_fips_error(struct cc_drvdata *p_drvdata) {} #endif /* CONFIG_CRYPTO_FIPS */