Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp355153yba; Mon, 20 May 2019 09:53:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqx6CEco9Rr9RZyoU1RuOk8hopadNCtxW89ve6Ji6AVMUT9b//T5SwIp32uyUwZEceWQjQqU X-Received: by 2002:a17:902:1cb:: with SMTP id b69mr50944782plb.158.1558371196498; Mon, 20 May 2019 09:53:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558371196; cv=none; d=google.com; s=arc-20160816; b=GQGfqzBBf/vK+CuPd2q6p5x7mlY94ecT2CIStEMZ6SZNsyjMDPCpoU4Jw6EQDP8Fhf CyKSKdbfbfYki4ccKfGViVD3R1Ab2xjqJJ0eEQFr2BwLXPErVXBamTUdLime8O7++Iv6 7y8CxQXlFeMxeBmJXmFfeSPSEQ8Og+9/YLBA0FPn+bzJR1S6MVIQAsiTUBjy54I4EE3a Us0EmyXOYG46Whv82W7MU74wc1GIRB/ED+nv+L2g1Fas2G3oiTmpMCgQottOjhEdPnHv vvqVlnqSm4LXDxet49VxeonZCSB2/3TtHz2FNO4QWttHBAgVzZQGTitLRut7ex2ti6ii N1sg== 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=qqwj2dkUx+ur/a/tog/DfPiMH4JjlCcX+Gpm0wKqRvM=; b=jgaNctbK7Dt5CVopNU3UoXacBccKjIsvmUtMqBtQRg2pAA9QvHwTmXY2P2gzTU4AXq Ydv8DjhtGL4zAxFfjo/LzQ/Mze/sH5I9BUvETfRMKPnxR+TYJHSydxpMhFeSgtIhj+r8 yzA/DpAs2/dCOuWoyItWVf5YFOIUC0S2f07O/LZnJxpClzkifJT+LnuQZ67Qk9QPBnUE SDxP0rCSjxYXmwuWnXtsc+xIFLExZzNQv9bn/qvfprQb0EPaHhUtqkKBGwn1O5wBy/Og dicuY8Ave/XGeH+ccPX6MQ/leD8aof96I95SlLCDcQznGG0U8s17v/kwondp/EQRdq2e hOSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=crIPmrwA; 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 q14si17640591pgg.521.2019.05.20.09.53.01; Mon, 20 May 2019 09:53: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; dkim=pass header.i=@kernel.org header.s=default header.b=crIPmrwA; 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 S2389148AbfETMaJ (ORCPT + 99 others); Mon, 20 May 2019 08:30:09 -0400 Received: from mail.kernel.org ([198.145.29.99]:46326 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389584AbfETMaF (ORCPT ); Mon, 20 May 2019 08:30:05 -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 4881421479; Mon, 20 May 2019 12:30:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1558355404; bh=UH6JkK6X0kuRS9HGzftnJ0yrDm0rxbG8gjI3mS3bbjs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=crIPmrwABNaxYXhQ8xH0YxnN5a8BbKZYTJo0BzZTHxJ/00og/iX37pPaI8jpqg3Es oaV/wHKS9RDDtTlDWpJATA5Gf+qTexriIhX0qDl33ITKuapVLrz0BYlGmE0vyvnu+m XzeNkyRn5p5IecQj4B/lHmtFUpOemAi3NoE92Q44= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ofir Drang , Gilad Ben-Yossef , Herbert Xu Subject: [PATCH 5.0 065/123] crypto: ccree - add function to handle cryptocell tee fips error Date: Mon, 20 May 2019 14:14:05 +0200 Message-Id: <20190520115249.137222777@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190520115245.439864225@linuxfoundation.org> References: <20190520115245.439864225@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ofir Drang commit 897ab2316910a66bb048f1c9cefa25e6a592dcd7 upstream. 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+ Signed-off-by: Herbert Xu Signed-off-by: Greg Kroah-Hartman --- drivers/crypto/ccree/cc_fips.c | 23 +++++++++++++++-------- drivers/crypto/ccree/cc_fips.h | 2 ++ 2 files changed, 17 insertions(+), 8 deletions(-) --- a/drivers/crypto/ccree/cc_fips.c +++ b/drivers/crypto/ccree/cc_fips.c @@ -72,20 +72,28 @@ static inline void tee_fips_error(struct 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, @@ -113,8 +121,7 @@ int cc_fips_init(struct cc_drvdata *p_dr 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; } --- 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_dr 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 c 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 */