From patchwork Mon May 20 12:14:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kroah-Hartman X-Patchwork-Id: 164617 Delivered-To: patch@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp225965ili; Mon, 20 May 2019 05:30:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqwkBqnUW16up7x8QfHEzZpb5svW60wRA3kugX6naLpXUvgwknGGf11/XCObjmA8KuKQmy1O X-Received: by 2002:aa7:9a99:: with SMTP id w25mr40632134pfi.249.1558355412390; Mon, 20 May 2019 05:30:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558355412; cv=none; d=google.com; s=arc-20160816; b=aK4BvTbGOIVZPdFbHM7Nu8NcqUxu30pX69WxiwDQDBSGR2GykBcCzS9iQi1CK9V+B6 4q8vmDIbMpZL++lgbX3FMegHHWzo0lU4w+xgEKGwyB0bkaFPSgY8xNyUbbmS/0OqEWDW FroVZNlB3NKs55J2TNoAB88qlMfMydR1Bk+k+TXA9hkSo0jmLzZ+UqH4QzOsXCc288Ze vRkDLQhq2VeH+pe7mR1KBjN4TzrNc9W3l/49Q6935nYpD+m7/MVGJYks0xxHFTcvZ2Ex 8AI5bqZC4eqk3BL23vuuMKrwP1JEroL/LLbIkQJtnuJ3Bkkq/hznPtuyRHeui5jXTkNh yCEQ== 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 186si18145232pfc.247.2019.05.20.05.30.12; Mon, 20 May 2019 05:30: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=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 S2390043AbfETMaL (ORCPT + 30 others); Mon, 20 May 2019 08:30:11 -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 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 */