From patchwork Wed Apr 24 13:34:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lionel Debieve X-Patchwork-Id: 162782 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp669987jan; Wed, 24 Apr 2019 06:35:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqzzzOtJAb1ekvKxFyDy1frdS4RHKEg2E+uFylu9lqkUFUkBOYUoQWtYcejewxFYeDxLLNOA X-Received: by 2002:aa7:864a:: with SMTP id a10mr34554628pfo.181.1556112928790; Wed, 24 Apr 2019 06:35:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556112928; cv=none; d=google.com; s=arc-20160816; b=Q9yYxPrWRRQ9Bqcr32qTdqF2ph4qmNaCRmECK9d3sVgqpKwn2M5Tzl55ybEGChc948 We30uHzbVtXGrKaQKNQoXWYOxO9V582/dqxeiWvAMG/ler4VzD8q3MTuH8cAQotUETsb IagZOBOw1sCSxGrJWl3GX6uWipZ58115QKHbd4LEx60mdOzcPewekwMez4+ZB2m9G0m2 g6OgkYA5psSkBt/v05HBkx4/N9c8GA1JKyfxmtptQwYwe0nFEQahf6qheIdu9UxqEq5W ovisT8/78rgL3lvB9l3zYHUxt63y+QjpFeOwphaxgW1dYkZAFc8C2k8u6cx52d4Y6huy eIGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=xOH1uezZYiVgXb4civrf+VPd+S3UtcRRe2DHQxQ7b9Q=; b=UanqpnJSNuIBP3Snd47E2AoJR+vlTo1xlKzspZLkGKEJwSkWQNLCXp09y8SBhkmG5f 78pEj1EcrM1rHLWL7v7UHEKjs2j9uzDNa1QzFU/oDHOEff4vhnjuDJfN+uifae2iX1NJ fjz6oQjmYGfGKC9SiQS1iI1Tht7/dmxCEmCGuMmocSvnY1sIhilFXSSaMmp4qQRIy5b1 ddDaM2fMCMzPGuSgpVba4ST+KHUviKEwc99SGhV3trAueKVabbAKvqb4Ue39GNgtEj71 kbPyD/v6f2BL5VlT7+qq76ziBeJANgNzKCFsSWQja9DnLw6HUS2AANnalZf7/CFhNWEu Sd0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=JSGflCjC; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-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 d2si17787248pgc.115.2019.04.24.06.35.28; Wed, 24 Apr 2019 06:35:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-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=@st.com header.s=STMicroelectronics header.b=JSGflCjC; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726168AbfDXNf1 (ORCPT + 3 others); Wed, 24 Apr 2019 09:35:27 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:37710 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726165AbfDXNf1 (ORCPT ); Wed, 24 Apr 2019 09:35:27 -0400 Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx08-00178001.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x3ODU5Ht019761; Wed, 24 Apr 2019 15:35:05 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=STMicroelectronics; bh=xOH1uezZYiVgXb4civrf+VPd+S3UtcRRe2DHQxQ7b9Q=; b=JSGflCjCEjM3sO+fYFYpGxz8wdlYs7FkwzMsHwVEwG9BY2WE1tzCWfOGmWfgJimVg7ve P2svm8ddjhXZuj8iV1v9JJKi8lvmkXqLWmMz75joggT7KS1xZI5ejwkrSXZjroAgcs7D yGs9Gvw8wPEAbgRw8lE3lLCEihThDj7bLS5Og0bI/to4v4QjpO/2konv+U8RMePQLtYr Ln8yoFj18X9ysl33g/HRoERM2sPowZ1VAtuXBKF7TfrzBFhOAk9auLAPjagU0kdbLnJB cAf8jycot7pz/CtlnAn/QAIc6tTP1hctbhL43s0nQc6dgOApO2mTLMXxxtNpVU/ykkyD Fw== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2rytad6ttk-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Wed, 24 Apr 2019 15:35:05 +0200 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 2DD103F; Wed, 24 Apr 2019 13:35:04 +0000 (GMT) Received: from Webmail-eu.st.com (Safex1hubcas21.st.com [10.75.90.44]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id E189626A8; Wed, 24 Apr 2019 13:35:03 +0000 (GMT) Received: from SAFEX1HUBCAS22.st.com (10.75.90.93) by SAFEX1HUBCAS21.st.com (10.75.90.44) with Microsoft SMTP Server (TLS) id 14.3.361.1; Wed, 24 Apr 2019 15:35:04 +0200 Received: from localhost (10.201.23.65) by Webmail-ga.st.com (10.75.90.48) with Microsoft SMTP Server (TLS) id 14.3.361.1; Wed, 24 Apr 2019 15:35:03 +0200 From: Lionel Debieve To: Herbert Xu , "David S . Miller" , Maxime Coquelin , "Alexandre Torgue" , , , CC: Benjamin Gaignard , Fabien Dessenne , Subject: [PATCH 2/3] crypto: stm32/cryp - remove request mutex protection Date: Wed, 24 Apr 2019 15:34:52 +0200 Message-ID: <1556112893-13116-2-git-send-email-lionel.debieve@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1556112893-13116-1-git-send-email-lionel.debieve@st.com> References: <1556112893-13116-1-git-send-email-lionel.debieve@st.com> MIME-Version: 1.0 X-Originating-IP: [10.201.23.65] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-04-24_09:, , signatures=0 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Mutex is badly used between threaded irq and driver. This mutex must be removed as the framework must ensure that requests must be serialized to avoid issue. Rework req to avoid crash during finalize by fixing the NULL pointer issue. Signed-off-by: Lionel Debieve --- drivers/crypto/stm32/stm32-cryp.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) -- 2.7.4 diff --git a/drivers/crypto/stm32/stm32-cryp.c b/drivers/crypto/stm32/stm32-cryp.c index cfcb640..eb525669 100644 --- a/drivers/crypto/stm32/stm32-cryp.c +++ b/drivers/crypto/stm32/stm32-cryp.c @@ -137,7 +137,6 @@ struct stm32_cryp { struct crypto_engine *engine; - struct mutex lock; /* protects req / areq */ struct ablkcipher_request *req; struct aead_request *areq; @@ -645,18 +644,13 @@ static void stm32_cryp_finish_req(struct stm32_cryp *cryp, int err) pm_runtime_mark_last_busy(cryp->dev); pm_runtime_put_autosuspend(cryp->dev); - if (is_gcm(cryp) || is_ccm(cryp)) { + if (is_gcm(cryp) || is_ccm(cryp)) crypto_finalize_aead_request(cryp->engine, cryp->areq, err); - cryp->areq = NULL; - } else { + else crypto_finalize_ablkcipher_request(cryp->engine, cryp->req, err); - cryp->req = NULL; - } memset(cryp->ctx->key, 0, cryp->ctx->keylen); - - mutex_unlock(&cryp->lock); } static int stm32_cryp_cpu_start(struct stm32_cryp *cryp) @@ -933,8 +927,6 @@ static int stm32_cryp_prepare_req(struct ablkcipher_request *req, if (!cryp) return -ENODEV; - mutex_lock(&cryp->lock); - rctx = req ? ablkcipher_request_ctx(req) : aead_request_ctx(areq); rctx->mode &= FLG_MODE_MASK; @@ -946,6 +938,7 @@ static int stm32_cryp_prepare_req(struct ablkcipher_request *req, if (req) { cryp->req = req; + cryp->areq = NULL; cryp->total_in = req->nbytes; cryp->total_out = cryp->total_in; } else { @@ -971,6 +964,7 @@ static int stm32_cryp_prepare_req(struct ablkcipher_request *req, * <---------- total_out -----------------> */ cryp->areq = areq; + cryp->req = NULL; cryp->authsize = crypto_aead_authsize(crypto_aead_reqtfm(areq)); cryp->total_in = areq->assoclen + areq->cryptlen; if (is_encrypt(cryp)) @@ -992,19 +986,19 @@ static int stm32_cryp_prepare_req(struct ablkcipher_request *req, if (cryp->in_sg_len < 0) { dev_err(cryp->dev, "Cannot get in_sg_len\n"); ret = cryp->in_sg_len; - goto out; + return ret; } cryp->out_sg_len = sg_nents_for_len(cryp->out_sg, cryp->total_out); if (cryp->out_sg_len < 0) { dev_err(cryp->dev, "Cannot get out_sg_len\n"); ret = cryp->out_sg_len; - goto out; + return ret; } ret = stm32_cryp_copy_sgs(cryp); if (ret) - goto out; + return ret; scatterwalk_start(&cryp->in_walk, cryp->in_sg); scatterwalk_start(&cryp->out_walk, cryp->out_sg); @@ -1016,10 +1010,6 @@ static int stm32_cryp_prepare_req(struct ablkcipher_request *req, } ret = stm32_cryp_hw_init(cryp); -out: - if (ret) - mutex_unlock(&cryp->lock); - return ret; } @@ -1959,8 +1949,6 @@ static int stm32_cryp_probe(struct platform_device *pdev) cryp->dev = dev; - mutex_init(&cryp->lock); - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); cryp->regs = devm_ioremap_resource(dev, res); if (IS_ERR(cryp->regs)) From patchwork Wed Apr 24 13:34:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lionel Debieve X-Patchwork-Id: 162784 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp673035jan; Wed, 24 Apr 2019 06:38:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqxBfFwikSjgRUnSJi3JleFtuuvaUnCor49crr1Zn4c2OI1WyIz4qmEB+XI6vwjSdd758WRT X-Received: by 2002:a17:902:20c6:: with SMTP id v6mr31023760plg.276.1556113099832; Wed, 24 Apr 2019 06:38:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556113099; cv=none; d=google.com; s=arc-20160816; b=ilFPBs+wlIcvUAVx4osDfJBSt8kfHrQWI7iwpbzoBD8LKCWhJ2/phH5HSPgUa+Vn0p nKXbvY5OPej1mibRSQ4FYVa/CRYr5v+zrDE1h4Uz7gyQZputUSC1YlcydqcNt6C0nIFH yphhz1iGnvOyPHVC6kolp62feKMduqPIkM440Y8H9L3NYs0g61GHgUA2ZMuOAukt6Eiz 4A20s6ZWUk6kKiL3DLgPd5niwbm1jXZXp2j+7n6qcIudN3hg5u8Ij3okqCVr4I5otaNK ieICDhHLTOXR/xy243qOGD/EIFdle4YpokFXfU/mxud3zOwaYWWwdN9hQujMak082JP9 TVNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=x/yKiLZpWSZHEh01K6LDhJAkI8bKK768NfMhU3V8tNw=; b=uGGPdbf+MyIV5L/jvkk0lnZ/BMuBBEUI6Jur+rDmROOwcdIxvhJCnA0AKWhFTytKEw qdFjKrSNpWN/WLq5DSBHvrk5vrQ6Fpl5/PCbWY2bGk/FoM49ORBWspMs8kkY7taWsUbh Cl+aY9kTATBr6kpZJ3WSxwjLDHTB5kNsQQvAjE9eqr6Et1L9N6o+Gcpn7ev3uUWQ5CIl 3lFT7NP4Eagbh087G/uoAHQQdLHcBnjxY3/vyNd+rBn0fSb1/GA+zdMy4RoKgbsBZMW8 yXyNy/F6g9GqcbpCmw0ICbUcmeA28i/ycn8G0kk51uuWQthnl1K5PJTyFX1yfXV56IjV 30mQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=ccuoGeyV; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-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 a2si17379796pgq.32.2019.04.24.06.38.19; Wed, 24 Apr 2019 06:38:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-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=@st.com header.s=STMicroelectronics header.b=ccuoGeyV; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729817AbfDXNiS (ORCPT + 3 others); Wed, 24 Apr 2019 09:38:18 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:18594 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727112AbfDXNiS (ORCPT ); Wed, 24 Apr 2019 09:38:18 -0400 Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx08-00178001.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x3ODbsvm011066; Wed, 24 Apr 2019 15:37:55 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=STMicroelectronics; bh=x/yKiLZpWSZHEh01K6LDhJAkI8bKK768NfMhU3V8tNw=; b=ccuoGeyV09hNGm2O3hoAdpDu7f9N8kzd6jMSWIQw9GkY1NYmEmx6z76x4UH39CqJDKQN tp/raFqJkaYLYtV8By3Smz8PIDYLSubxgV2jnrKQHHEbcmWxvwX0GEzJhHWgZrRR8oQN JPldm+XA8mIgiQB5M7M2qScx84kAICE1nPycY8gUFxbFyNDiS1aSsudJh18BNAv1tauq 4X5vvackunF2lLP1jPl6U/944q+Wt5FT6cIu4z6ZGPJar2iNftFYxVfo+jqNOHgux+Ad P2ihzhUQ4iva5zIFX3qiwcHf2EYZP5nFpBDQCqPmGXpsMNkL5ds8hDaQYncpYXTqeUVn Rg== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2ryrj677q1-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Wed, 24 Apr 2019 15:37:55 +0200 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 1E94C46; Wed, 24 Apr 2019 13:35:05 +0000 (GMT) Received: from Webmail-eu.st.com (Safex1hubcas23.st.com [10.75.90.46]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id EB13326A4; Wed, 24 Apr 2019 13:35:04 +0000 (GMT) Received: from SAFEX1HUBCAS22.st.com (10.75.90.93) by SAFEX1HUBCAS23.st.com (10.75.90.46) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 24 Apr 2019 15:35:04 +0200 Received: from localhost (10.201.23.65) by Webmail-ga.st.com (10.75.90.48) with Microsoft SMTP Server (TLS) id 14.3.361.1; Wed, 24 Apr 2019 15:35:04 +0200 From: Lionel Debieve To: Herbert Xu , "David S . Miller" , Maxime Coquelin , "Alexandre Torgue" , , , CC: Benjamin Gaignard , Fabien Dessenne , Subject: [PATCH 3/3] crypto: stm32/cryp - update to return iv_out Date: Wed, 24 Apr 2019 15:34:53 +0200 Message-ID: <1556112893-13116-3-git-send-email-lionel.debieve@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1556112893-13116-1-git-send-email-lionel.debieve@st.com> References: <1556112893-13116-1-git-send-email-lionel.debieve@st.com> MIME-Version: 1.0 X-Originating-IP: [10.201.23.65] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-04-24_09:, , signatures=0 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org The kernel crypto API request output the next IV data to IV buffer for CBC implementation. Signed-off-by: Lionel Debieve --- drivers/crypto/stm32/stm32-cryp.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) -- 2.7.4 diff --git a/drivers/crypto/stm32/stm32-cryp.c b/drivers/crypto/stm32/stm32-cryp.c index eb525669..cddcc97 100644 --- a/drivers/crypto/stm32/stm32-cryp.c +++ b/drivers/crypto/stm32/stm32-cryp.c @@ -393,6 +393,23 @@ static void stm32_cryp_hw_write_iv(struct stm32_cryp *cryp, u32 *iv) } } +static void stm32_cryp_get_iv(struct stm32_cryp *cryp) +{ + struct ablkcipher_request *req = cryp->req; + u32 *tmp = req->info; + + if (!tmp) + return; + + *tmp++ = cpu_to_be32(stm32_cryp_read(cryp, CRYP_IV0LR)); + *tmp++ = cpu_to_be32(stm32_cryp_read(cryp, CRYP_IV0RR)); + + if (is_aes(cryp)) { + *tmp++ = cpu_to_be32(stm32_cryp_read(cryp, CRYP_IV1LR)); + *tmp++ = cpu_to_be32(stm32_cryp_read(cryp, CRYP_IV1RR)); + } +} + static void stm32_cryp_hw_write_key(struct stm32_cryp *c) { unsigned int i; @@ -622,6 +639,9 @@ static void stm32_cryp_finish_req(struct stm32_cryp *cryp, int err) /* Phase 4 : output tag */ err = stm32_cryp_read_auth_tag(cryp); + if (!err && (!(is_gcm(cryp) || is_ccm(cryp)))) + stm32_cryp_get_iv(cryp); + if (cryp->sgs_copied) { void *buf_in, *buf_out; int pages, len;