From patchwork Tue Feb 11 17:17:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 864192 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2085.outbound.protection.outlook.com [40.107.244.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5592A262172; Tue, 11 Feb 2025 17:19:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.85 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294384; cv=fail; b=UammDJDfqIEubfUkmfc4mb/Ntpx4aGlGawKONga8lvOT8OyVNavVSLFg94tqg3vK+b2d3wVn2SBWtsgWuQq8+jr069Y6f4dhZ6k+9e6H/MwGTPmInRnr42MnNtz9PDizaQqDcM5GuwhCTuREovlhoMJDuqX/Cn9ODSwPz6Cbf5I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294384; c=relaxed/simple; bh=C13nHlWGDhRnknGErb+juqd1bNzkxuWT3lPQrCXy9Dw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=cgt5r2QvGtAL5dXucLZoyPCjZnvZtsrL65b/RrhWB8fGcdroe4aaBX7MNzRP4oQCO/bgr9zD53EFIKx/3SFrcETfm3qxWF2tR3YOH8wdu9/wIpX1b2sph7y622tXfULEfg6KRb5hJSNQuxc7yYq8bogquN+uFw2rv31YmFm4q1U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=jNi7Rx+7; arc=fail smtp.client-ip=40.107.244.85 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="jNi7Rx+7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j5neT/0v0u/CWpeA19ciIObENRadp5WK2BqXJNVEOcGtEWjh7prk93bVmQgBl3sf95iJmdkBz2P6VOlhvf13KrDvLoXWZPJ3mfCe1Zmm7Lk3iYx9W5O1SUPkzfVPoj77tN1Sx8hBeUTtsuopmj8lM3AEGj4NlYGz3m4uYFN97R6yzrky9UcQWQzJRm7ndN/sfSktZZpA+2T47NKDvhmh7s/ye/8NcObllUgcgOWnKdcOU1yjWEm//hG/Z54AImXzeQdKWaar3sg37hNFblc/BALgy8MyW2zhxi45Zebi2xr2iAsLbqT6zuDUQBYOlDmmJEl/XMIK3vie8Jg+XnEMdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2mGdE+U/E8Rs1AsJN7w0cdGZu0mLVKXmjBjADszgu4M=; b=ff0VwDK5gr0AtvpRcxrgOLQcCoLIRiA1RyWq85kfU2auLfe2G5pM3wvGJoaEUWS4kn75yD5QvJuG/4MnTc5XLrpuakzDlFxCXlEOjoWggI3f+waN+14jmKAF5UIIFTdXiA/B6sqF8/0Cof+fHMIssIYwZqL4V6n2bqVJ7u4oMfdLrE3cnBNU/CWxKPZtrBYZ6y5fuPaM6ucdEOxjVjfnULYTFCtlOHS6JE9mssyFcigH0yf9aA9U8VpB1yY6RTFtCideAnpPgBPTt1m9ny1Dku+Y5WWmr7/tYHvmjXqgSXSBT1q2opJx9CWKQ9jZVotF/hgs1I57FnbxfAFBL96E8Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=gondor.apana.org.au smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2mGdE+U/E8Rs1AsJN7w0cdGZu0mLVKXmjBjADszgu4M=; b=jNi7Rx+7G2fdsrvhoXMc0eA+U0u6Ou0eJDVBXXddH1vm+1xRfmsuUwfIs8E9lER2Md2QohATBuhA+KJ/C8nxdnVP6gIR61nkg0OW1b141naaU3AAos1G9hr72G5z4vbDXhPGYIdJLqASiko1b3dyNj3dfRIl6pgw6DPU0AIuA9MSEfjAA6MpgqLUdQ3R2tcYGQQSJ/rU/ch74oNHLxdHIA+WYSeMmymcp+sGQY6p4gxBG/gkgMM9plUvbI9Ad318oQbgv7I+7w/Leqqql1uOiCKI/a6UYbOJsWEMFWjUXX21kux9EfsZ6JCqdDUn7MZgjgOZA+TfElHeu/iNJ1waJA== Received: from DM6PR03CA0069.namprd03.prod.outlook.com (2603:10b6:5:100::46) by CY8PR12MB7364.namprd12.prod.outlook.com (2603:10b6:930:50::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.11; Tue, 11 Feb 2025 17:19:33 +0000 Received: from DS1PEPF00017093.namprd03.prod.outlook.com (2603:10b6:5:100:cafe::8e) by DM6PR03CA0069.outlook.office365.com (2603:10b6:5:100::46) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.31 via Frontend Transport; Tue, 11 Feb 2025 17:19:33 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by DS1PEPF00017093.mail.protection.outlook.com (10.167.17.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Tue, 11 Feb 2025 17:19:32 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 11 Feb 2025 09:19:18 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 11 Feb 2025 09:19:17 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Tue, 11 Feb 2025 09:19:15 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v2 02/10] crypto: tegra: Do not use fixed size buffers Date: Tue, 11 Feb 2025 22:47:05 +0530 Message-ID: <20250211171713.65770-3-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250211171713.65770-1-akhilrajeev@nvidia.com> References: <20250211171713.65770-1-akhilrajeev@nvidia.com> Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017093:EE_|CY8PR12MB7364:EE_ X-MS-Office365-Filtering-Correlation-Id: 56e810af-d85a-4921-06ae-08dd4ac04004 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: vSwCfuNqolYToYl50kjlnZECj/QzwxxanwWnzFUkDrWxYXCyiL0GzZzHevX6+mEXTzHzh2TeUunf9Wh+qdWoGcew1CY34iskGshhAs+xzPsGPWXVchk1KhchpU4C7yhrtGzuRrAxgrMtBziMVAethprYqelui4UCY94pCkn6Za8Ay+AuVM+HUnGvSA1XLHPzM4NKHjiHS1pYnGl9BZvy8/5wYL5HufmllI9jJqfygHJ7kelr1ZoVa43gewSZzDFvX586LYkSBX8rbFwsL9RTOdW6XuLndZu7wdYf6SbJ823vZeOwjHROiA1TdsyDeeu9gg2ha9wralK3oeAcxDNozSFw3/oHkMVqVKES5iRPQI579+RdLxhPkV80jPYa4H/BzCYYFqHnAqvl84gsjQIqdO1CBArWqtcIRBMiJtHfpRSz17ykyQBJ9nUoSAA0VWDEvpMGFUsVTfTen32pd4hEWlxXbSGPywLLb5A9mQdCMB3uYlBzph0wvridyU81LHRVlChfia7hFu876t4RTKu2r6kIfE6CC2Zjbe05fgXBrrq5VN+OVBQjjUh670uobFBJfMPhyRT3biaW2IRRh5jghDQIzSzFlRSfLiYQ3D6OTdZLsaC6PacvmtYZKbFm4m7dx+5KnxBk9ai+NQrAALv4sP9POA4UONBzr+vEbLKskl0WXYGGMlDETwYIqbyWI08C4WYnivZmT41Sx+9OMnEfH2uuw67EOCR43bABmh8cFRuUFevmFXqRWYzzMqHZpw5Q1g0R8b+dxpREiFAH4in/GBq5hRaVlyC6es8lI6IynFPrI56OerD6VabpaJ8t4idnhNou24FdZin4Z9DQIPIPa6Pg/4ftUKz8mV1sjhGd+OwWRpRlXOjsx4hgQCBPCOHfVutAf7aVQR24pz7926s12iOf2eAJu5RXCP8t9Ynzik+CBELdQQVQT/tuRyjmuADUuKt/HmV/55QsWCJiqCBL+bw48g1ubyP9mLN46nCz9QLjQLvqD0wOgeL5f3HbAnhJx9K/aKmLsfHxVL7ErjjhtaHNXpvLF7PMOk9/oGVptoDpFYh1OSTHCIO5ClN1EeHne6i8gGZDIqTPuZNcBQtH1zUk92y317BDowHgxLKr9TTtJB9Sn6D0a4a9tClnirzZcl/OCN5T1NuDRGZqyeWqcfyoWRyX+P8YlhSPOsbM3t9kDrnS3AqCjP1Ikd/4zdCmAm6vFWqoDdm/TT3AQ8EJtip6oCBU771qkUBcEaf7dDFtiPJgF0j4FtcxWZKE2ZWVUp2k/pSssjQBcVFInzW2y2gRg0ygAheb1EXqrDW1h1xsMzgDOkx3mBreDuEEny+oAgvqnRrdAAlBKmbGjZP8nAwDbkt+maZlDcrdznYOkdtTiCluRleGFF0iLgaWrYCN+e3N8D6QXzpQVC3Hj1VqWccaEIzt7PGmY8Wovke/87sh83kSlap0agHN2dsOByRFEOiL/HLfOkklXTi2jZro81tjXSCHJ9dAVPkB+LLK5Z8= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2025 17:19:32.3097 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 56e810af-d85a-4921-06ae-08dd4ac04004 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF00017093.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7364 Allocate the buffer based on the request instead of a fixed buffer length. In operations which may require larger buffer size, a fixed buffer may fail. Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-aes.c | 124 ++++++++++++++------------- drivers/crypto/tegra/tegra-se-hash.c | 38 +++++--- drivers/crypto/tegra/tegra-se.h | 2 - 3 files changed, 89 insertions(+), 75 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index 7da7e169a314..c2b8891a905d 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -263,12 +263,6 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) unsigned int cmdlen; int ret; - rctx->datbuf.buf = dma_alloc_coherent(se->dev, SE_AES_BUFLEN, - &rctx->datbuf.addr, GFP_KERNEL); - if (!rctx->datbuf.buf) - return -ENOMEM; - - rctx->datbuf.size = SE_AES_BUFLEN; rctx->iv = (u32 *)req->iv; rctx->len = req->cryptlen; @@ -278,6 +272,12 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) rctx->len += AES_BLOCK_SIZE - (rctx->len % AES_BLOCK_SIZE); } + rctx->datbuf.size = rctx->len; + rctx->datbuf.buf = dma_alloc_coherent(se->dev, rctx->datbuf.size, + &rctx->datbuf.addr, GFP_KERNEL); + if (!rctx->datbuf.buf) + return -ENOMEM; + scatterwalk_map_and_copy(rctx->datbuf.buf, req->src, 0, req->cryptlen, 0); /* Prepare the command and submit for execution */ @@ -289,7 +289,7 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) scatterwalk_map_and_copy(rctx->datbuf.buf, req->dst, 0, req->cryptlen, 1); /* Free the buffer */ - dma_free_coherent(ctx->se->dev, SE_AES_BUFLEN, + dma_free_coherent(ctx->se->dev, rctx->datbuf.size, rctx->datbuf.buf, rctx->datbuf.addr); crypto_finalize_skcipher_request(se->engine, req, ret); @@ -1117,6 +1117,11 @@ static int tegra_ccm_crypt_init(struct aead_request *req, struct tegra_se *se, rctx->assoclen = req->assoclen; rctx->authsize = crypto_aead_authsize(tfm); + if (rctx->encrypt) + rctx->cryptlen = req->cryptlen; + else + rctx->cryptlen = req->cryptlen - rctx->authsize; + memcpy(iv, req->iv, 16); ret = tegra_ccm_check_iv(iv); @@ -1145,30 +1150,26 @@ static int tegra_ccm_do_one_req(struct crypto_engine *engine, void *areq) struct tegra_se *se = ctx->se; int ret; + ret = tegra_ccm_crypt_init(req, se, rctx); + if (ret) + return ret; + /* Allocate buffers required */ - rctx->inbuf.buf = dma_alloc_coherent(ctx->se->dev, SE_AES_BUFLEN, + rctx->inbuf.size = rctx->assoclen + rctx->authsize + rctx->cryptlen + 100; + rctx->inbuf.buf = dma_alloc_coherent(ctx->se->dev, rctx->inbuf.size, &rctx->inbuf.addr, GFP_KERNEL); if (!rctx->inbuf.buf) return -ENOMEM; - rctx->inbuf.size = SE_AES_BUFLEN; - - rctx->outbuf.buf = dma_alloc_coherent(ctx->se->dev, SE_AES_BUFLEN, + rctx->outbuf.size = rctx->assoclen + rctx->authsize + rctx->cryptlen + 100; + rctx->outbuf.buf = dma_alloc_coherent(ctx->se->dev, rctx->outbuf.size, &rctx->outbuf.addr, GFP_KERNEL); if (!rctx->outbuf.buf) { ret = -ENOMEM; goto outbuf_err; } - rctx->outbuf.size = SE_AES_BUFLEN; - - ret = tegra_ccm_crypt_init(req, se, rctx); - if (ret) - goto out; - if (rctx->encrypt) { - rctx->cryptlen = req->cryptlen; - /* CBC MAC Operation */ ret = tegra_ccm_compute_auth(ctx, rctx); if (ret) @@ -1179,8 +1180,6 @@ static int tegra_ccm_do_one_req(struct crypto_engine *engine, void *areq) if (ret) goto out; } else { - rctx->cryptlen = req->cryptlen - ctx->authsize; - /* CTR operation */ ret = tegra_ccm_do_ctr(ctx, rctx); if (ret) @@ -1193,11 +1192,11 @@ static int tegra_ccm_do_one_req(struct crypto_engine *engine, void *areq) } out: - dma_free_coherent(ctx->se->dev, SE_AES_BUFLEN, + dma_free_coherent(ctx->se->dev, rctx->inbuf.size, rctx->outbuf.buf, rctx->outbuf.addr); outbuf_err: - dma_free_coherent(ctx->se->dev, SE_AES_BUFLEN, + dma_free_coherent(ctx->se->dev, rctx->outbuf.size, rctx->inbuf.buf, rctx->inbuf.addr); crypto_finalize_aead_request(ctx->se->engine, req, ret); @@ -1213,23 +1212,6 @@ static int tegra_gcm_do_one_req(struct crypto_engine *engine, void *areq) struct tegra_aead_reqctx *rctx = aead_request_ctx(req); int ret; - /* Allocate buffers required */ - rctx->inbuf.buf = dma_alloc_coherent(ctx->se->dev, SE_AES_BUFLEN, - &rctx->inbuf.addr, GFP_KERNEL); - if (!rctx->inbuf.buf) - return -ENOMEM; - - rctx->inbuf.size = SE_AES_BUFLEN; - - rctx->outbuf.buf = dma_alloc_coherent(ctx->se->dev, SE_AES_BUFLEN, - &rctx->outbuf.addr, GFP_KERNEL); - if (!rctx->outbuf.buf) { - ret = -ENOMEM; - goto outbuf_err; - } - - rctx->outbuf.size = SE_AES_BUFLEN; - rctx->src_sg = req->src; rctx->dst_sg = req->dst; rctx->assoclen = req->assoclen; @@ -1243,6 +1225,21 @@ static int tegra_gcm_do_one_req(struct crypto_engine *engine, void *areq) memcpy(rctx->iv, req->iv, GCM_AES_IV_SIZE); rctx->iv[3] = (1 << 24); + /* Allocate buffers required */ + rctx->inbuf.size = rctx->assoclen + rctx->authsize + rctx->cryptlen; + rctx->inbuf.buf = dma_alloc_coherent(ctx->se->dev, rctx->inbuf.size, + &rctx->inbuf.addr, GFP_KERNEL); + if (!rctx->inbuf.buf) + return -ENOMEM; + + rctx->outbuf.size = rctx->assoclen + rctx->authsize + rctx->cryptlen; + rctx->outbuf.buf = dma_alloc_coherent(ctx->se->dev, rctx->outbuf.size, + &rctx->outbuf.addr, GFP_KERNEL); + if (!rctx->outbuf.buf) { + ret = -ENOMEM; + goto outbuf_err; + } + /* If there is associated data perform GMAC operation */ if (rctx->assoclen) { ret = tegra_gcm_do_gmac(ctx, rctx); @@ -1266,11 +1263,11 @@ static int tegra_gcm_do_one_req(struct crypto_engine *engine, void *areq) ret = tegra_gcm_do_verify(ctx->se, rctx); out: - dma_free_coherent(ctx->se->dev, SE_AES_BUFLEN, + dma_free_coherent(ctx->se->dev, rctx->outbuf.size, rctx->outbuf.buf, rctx->outbuf.addr); outbuf_err: - dma_free_coherent(ctx->se->dev, SE_AES_BUFLEN, + dma_free_coherent(ctx->se->dev, rctx->inbuf.size, rctx->inbuf.buf, rctx->inbuf.addr); /* Finalize the request if there are no errors */ @@ -1497,6 +1494,11 @@ static int tegra_cmac_do_update(struct ahash_request *req) return 0; } + rctx->datbuf.buf = dma_alloc_coherent(se->dev, rctx->datbuf.size, + &rctx->datbuf.addr, GFP_KERNEL); + if (!rctx->datbuf.buf) + return -ENOMEM; + /* Copy the previous residue first */ if (rctx->residue.size) memcpy(rctx->datbuf.buf, rctx->residue.buf, rctx->residue.size); @@ -1529,6 +1531,9 @@ static int tegra_cmac_do_update(struct ahash_request *req) if (!(rctx->task & SHA_FINAL)) tegra_cmac_copy_result(ctx->se, rctx); + dma_free_coherent(ctx->se->dev, rctx->datbuf.size, + rctx->datbuf.buf, rctx->datbuf.addr); + return ret; } @@ -1543,10 +1548,20 @@ static int tegra_cmac_do_final(struct ahash_request *req) if (!req->nbytes && !rctx->total_len && ctx->fallback_tfm) { return crypto_shash_tfm_digest(ctx->fallback_tfm, - rctx->datbuf.buf, 0, req->result); + NULL, 0, req->result); + } + + if (rctx->residue.size) { + rctx->datbuf.buf = dma_alloc_coherent(se->dev, rctx->residue.size, + &rctx->datbuf.addr, GFP_KERNEL); + if (!rctx->datbuf.buf) { + ret = -ENOMEM; + goto out_free; + } + + memcpy(rctx->datbuf.buf, rctx->residue.buf, rctx->residue.size); } - memcpy(rctx->datbuf.buf, rctx->residue.buf, rctx->residue.size); rctx->datbuf.size = rctx->residue.size; rctx->total_len += rctx->residue.size; rctx->config = tegra234_aes_cfg(SE_ALG_CMAC, 0); @@ -1565,8 +1580,10 @@ static int tegra_cmac_do_final(struct ahash_request *req) writel(0, se->base + se->hw->regs->result + (i * 4)); out: - dma_free_coherent(se->dev, SE_SHA_BUFLEN, - rctx->datbuf.buf, rctx->datbuf.addr); + if (rctx->residue.size) + dma_free_coherent(se->dev, rctx->datbuf.size, + rctx->datbuf.buf, rctx->datbuf.addr); +out_free: dma_free_coherent(se->dev, crypto_ahash_blocksize(tfm) * 2, rctx->residue.buf, rctx->residue.addr); return ret; @@ -1672,28 +1689,15 @@ static int tegra_cmac_init(struct ahash_request *req) rctx->residue.buf = dma_alloc_coherent(se->dev, rctx->blk_size * 2, &rctx->residue.addr, GFP_KERNEL); if (!rctx->residue.buf) - goto resbuf_fail; + return -ENOMEM; rctx->residue.size = 0; - rctx->datbuf.buf = dma_alloc_coherent(se->dev, SE_SHA_BUFLEN, - &rctx->datbuf.addr, GFP_KERNEL); - if (!rctx->datbuf.buf) - goto datbuf_fail; - - rctx->datbuf.size = 0; - /* Clear any previous result */ for (i = 0; i < CMAC_RESULT_REG_COUNT; i++) writel(0, se->base + se->hw->regs->result + (i * 4)); return 0; - -datbuf_fail: - dma_free_coherent(se->dev, rctx->blk_size, rctx->residue.buf, - rctx->residue.addr); -resbuf_fail: - return -ENOMEM; } static int tegra_cmac_setkey(struct crypto_ahash *tfm, const u8 *key, diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c index c7b2a062a03c..b4a179a8febd 100644 --- a/drivers/crypto/tegra/tegra-se-hash.c +++ b/drivers/crypto/tegra/tegra-se-hash.c @@ -332,6 +332,11 @@ static int tegra_sha_do_update(struct ahash_request *req) return 0; } + rctx->datbuf.buf = dma_alloc_coherent(ctx->se->dev, rctx->datbuf.size, + &rctx->datbuf.addr, GFP_KERNEL); + if (!rctx->datbuf.buf) + return -ENOMEM; + /* Copy the previous residue first */ if (rctx->residue.size) memcpy(rctx->datbuf.buf, rctx->residue.buf, rctx->residue.size); @@ -368,6 +373,9 @@ static int tegra_sha_do_update(struct ahash_request *req) if (!(rctx->task & SHA_FINAL)) tegra_sha_copy_hash_result(se, rctx); + dma_free_coherent(ctx->se->dev, rctx->datbuf.size, + rctx->datbuf.buf, rctx->datbuf.addr); + return ret; } @@ -380,7 +388,17 @@ static int tegra_sha_do_final(struct ahash_request *req) u32 *cpuvaddr = se->cmdbuf->addr; int size, ret = 0; - memcpy(rctx->datbuf.buf, rctx->residue.buf, rctx->residue.size); + if (rctx->residue.size) { + rctx->datbuf.buf = dma_alloc_coherent(se->dev, rctx->residue.size, + &rctx->datbuf.addr, GFP_KERNEL); + if (!rctx->datbuf.buf) { + ret = -ENOMEM; + goto out_free; + } + + memcpy(rctx->datbuf.buf, rctx->residue.buf, rctx->residue.size); + } + rctx->datbuf.size = rctx->residue.size; rctx->total_len += rctx->residue.size; @@ -397,8 +415,10 @@ static int tegra_sha_do_final(struct ahash_request *req) memcpy(req->result, rctx->digest.buf, rctx->digest.size); out: - dma_free_coherent(se->dev, SE_SHA_BUFLEN, - rctx->datbuf.buf, rctx->datbuf.addr); + if (rctx->residue.size) + dma_free_coherent(se->dev, rctx->datbuf.size, + rctx->datbuf.buf, rctx->datbuf.addr); +out_free: dma_free_coherent(se->dev, crypto_ahash_blocksize(tfm), rctx->residue.buf, rctx->residue.addr); dma_free_coherent(se->dev, rctx->digest.size, rctx->digest.buf, @@ -527,19 +547,11 @@ static int tegra_sha_init(struct ahash_request *req) if (!rctx->residue.buf) goto resbuf_fail; - rctx->datbuf.buf = dma_alloc_coherent(se->dev, SE_SHA_BUFLEN, - &rctx->datbuf.addr, GFP_KERNEL); - if (!rctx->datbuf.buf) - goto datbuf_fail; - return 0; -datbuf_fail: - dma_free_coherent(se->dev, rctx->blk_size, rctx->residue.buf, - rctx->residue.addr); resbuf_fail: - dma_free_coherent(se->dev, SE_SHA_BUFLEN, rctx->datbuf.buf, - rctx->datbuf.addr); + dma_free_coherent(se->dev, rctx->digest.size, rctx->digest.buf, + rctx->digest.addr); digbuf_fail: return -ENOMEM; } diff --git a/drivers/crypto/tegra/tegra-se.h b/drivers/crypto/tegra/tegra-se.h index b54aefe717a1..e196a90eedb9 100644 --- a/drivers/crypto/tegra/tegra-se.h +++ b/drivers/crypto/tegra/tegra-se.h @@ -340,8 +340,6 @@ #define SE_CRYPTO_CTR_REG_COUNT 4 #define SE_MAX_KEYSLOT 15 #define SE_MAX_MEM_ALLOC SZ_4M -#define SE_AES_BUFLEN 0x8000 -#define SE_SHA_BUFLEN 0x2000 #define SHA_FIRST BIT(0) #define SHA_UPDATE BIT(1) From patchwork Tue Feb 11 17:17:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 864191 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2067.outbound.protection.outlook.com [40.107.94.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EC49262171; Tue, 11 Feb 2025 17:19:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294396; cv=fail; b=afS22Aq/qnvaeWpM0S7Xhh+I8wdhFyGZht3CAxM5zC0hZ/wPlHAFnZl3GRm7uazUjW5/VE3Ofgs1RnFkkvN5zEiKJrdhqVrCw9H+4NAh45vxsu6L42JNsxdDCkmFRUeCXr0A/QMiaiWsk7dpcKQ++j3CRSEDVxPEw8C6xNt7K9E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294396; c=relaxed/simple; bh=ky6avQTNlk5H2RTwq4XgHkXbOLa0/YatqxjpApepmNA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VEl1Wz2srVpyVGAZUzrtjFs+PYeHmkyNFcOVjtH+mmNl7HMWbf+5nOJ0ci20IGwM/70Ys0E8eqIiIoxqDb6/j56mbr/DQ/zhPikOx22lHUmDUt5RvuHV1uw3b/pQGJc7yEHMpf5guukighNWxmKPICRl7+L/tr8ethngUj0vbiU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=lJWZ7fCu; arc=fail smtp.client-ip=40.107.94.67 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="lJWZ7fCu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dcNOdqQhuLQKrBPMgPOliAG/0nuwDyJn6KaUaF3MKDzaKn9qQzWFOjrfbvZKoR2WZFkpbUwtslEBuyeHKwXjsEkIJH6ejwUPKdZCD8/pR5P7M9g7BLvFw3Y2IpomtAwEUK8jw/Wuhu72ehlW0dKZzrx6Pg32nwSvAqJSDC5O9sl5YUATeBMILoJvy+26CaZVo/oaNty8K79NI5JiTfkfGeJJQHNRbgzBdwYgAkHum/9b95POVtjBYyUN4CZR+r9EQp0ftbYJIO0Sb+EKNMrjxmXxb2BPnyeVcqVTZVIxbR3ejsz6Ar+7gDij6ByvI1tqnvrvSK/3A8KzllJM2JY+Yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fSi9lTCWDzxJrON1Yd5Sq4qkI+9rzl7SHRY83RkKIwk=; b=xG4BW5R5QndzxdCvPPmmf/A1+9Qs2xEDcZ2/Qwo1oG6FCSxlvlLWtCqdLyaAGeZpEY38AV5THA1JMev3+qztNvIPk2fpt6i6vwDh9TVabqxchJ61AxxNDxqCrgFqLpeDG7snXwx/e7xWHlePyFz1cm2w+zFptGBqvOWdY0J+SSs5QwgZaHhMcZ4E79BAuqXXYwFwF96RyMzTwu4d7F0TksGM3Dm8h8QMRdLlb/c7wxxKPq3NThUXqQHM6tmzLf6WOwMh4UjGx8ZhLI/6csoxRl/SY+L6uX7mHvBU+88OqvU7ng/WRvkYbF5Yi4IVzOmm92mxGuuUeZJUxzCForKebg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=gondor.apana.org.au smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fSi9lTCWDzxJrON1Yd5Sq4qkI+9rzl7SHRY83RkKIwk=; b=lJWZ7fCul14YLPEUSUwdQFqFxX6M1GlzrxBjyyoTS8SEwrhBHrQbHHL18SUtvIU4XMcaLeHMworhVbhRVyu0TxREGRYgDzIHGXMgt71nHf2tfLcf3p9Un1foNXs5jf/2dZrwhX8+jAsYtqZM/tQs96+RsVotdTV9R+WqEil2LS4Sn14LFpCmItx6Kojevs1tXw+8P3fdgyUGdl+EP9v1BTsLTBvNiurEID/6kqaSlPpvLmyHmIncUwK/6dyNjpMqiSrA4Vxf0gs+NIlKjvPApaOFmPhpofM0JtbvzYXyfJtLH6Ye2iFJr2/4pJ9Gk3W3LFIEYNV0iQAJcoQoLnO1gg== Received: from MW2PR16CA0015.namprd16.prod.outlook.com (2603:10b6:907::28) by BY5PR12MB4082.namprd12.prod.outlook.com (2603:10b6:a03:212::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.13; Tue, 11 Feb 2025 17:19:50 +0000 Received: from MWH0EPF000989EB.namprd02.prod.outlook.com (2603:10b6:907:0:cafe::12) by MW2PR16CA0015.outlook.office365.com (2603:10b6:907::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.24 via Frontend Transport; Tue, 11 Feb 2025 17:19:50 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000989EB.mail.protection.outlook.com (10.167.241.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Tue, 11 Feb 2025 17:19:49 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 11 Feb 2025 09:19:31 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 11 Feb 2025 09:19:31 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Tue, 11 Feb 2025 09:19:28 -0800 From: Akhil R To: , , , , , , CC: Akhil R , kernel test robot , "Dan Carpenter" Subject: [PATCH v2 04/10] crypto: tegra: check return value for hash do_one_req Date: Tue, 11 Feb 2025 22:47:07 +0530 Message-ID: <20250211171713.65770-5-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250211171713.65770-1-akhilrajeev@nvidia.com> References: <20250211171713.65770-1-akhilrajeev@nvidia.com> Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000989EB:EE_|BY5PR12MB4082:EE_ X-MS-Office365-Filtering-Correlation-Id: 80a7083d-73a8-4d6f-9ac3-08dd4ac04a6e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: /XA+mlU3Fvby6BbMM7rMHQRzBYa9OF1frtVw1P2qDAq6e1xIHaJm0Y7NuTCzijifjqM3JOF8jpY5AZIAkS7WUDLiNWySqtzrOWi48jMrXanTeaKRrr8UTNiCbyVYwe6HdS2sJQdc7/kdh/vTRGfVB1yk2tyJZNSoQLqiFS8zRbUB4bKT4SS2A9FqKL2XnGoOEAOzdgkJSLdDzyxO+EeqL1n1aSzKGmv6bNJmJdJmzcG6DhS0xsglC953VhtLOcEs6iv1uSbsqtMRZECCx1X0j5WMSa88HhyjB57skfG1sWMLa/ZS8QzERUS7Xb9SuSwNrW1z/WJrGVnWiL5MzYxAj/1ACVzSZ9uYCJMCMhxm1PrPDmS2k1EK7d3nBNNZpnUeIB9+FzXQlni86zM+zu3eSRSp0xMZqK63xChug0RLhLhr+doF87A/ya+djGkzt+4rQf3kUJgLfXOVWnR782T+STK2WpP5CAWCLcBFq9A0P0G06pHwun8Yw2eXnhRqDEpc215pEEPJHvXoLPx622bM1j3LduppKKJnotTXOo4UYgQHkRNpxs/LL1gIiK2f9MC1A+NzcnedTclNvNYHjw9LXIAXy0MggTbaNbsCiLqQb8U7LmBojsoEQFV2YoAdtlxeqUEjhPJGZ+8x6Kk+tUQq7Xv/x80Me2CewbYYlCgU4kFxz2YJnJo7k2Os7nPWVtedM3Jxn71rSU+Xe0qjp2fydEDhmIELW7ykh7c0L9Oui0OMneTXZvQ+j1IsaKNnnVq/m3+EXJn9ItKnrSfbVHRyTBOc3p+V8ERiGGBHQXx8QzG7NHnRLZTAN0zSw0i53OKU6n1DJWvCG/AKrkXv3h0h1B00su8ZVVCHhzO6aQANrAsRtSKGNlZAGdPXB3JZ0y/O5t/MldbhvUV/DH1ZtnSyaT6ALOrd/iWyOCmXD1IahcCPChNbxM/AdJUM5vL8WBOEJPuiSS9ORPgtvr0k5Yo2+38xDI3vuKTScq+JRXhqcF1sKkzaJ5jvB/mzHGomPdqAs/AXJP4aBOqsqIeUSct9yNtNbEDdN5YVwWBAAnbtyK2G1oJ76SS0jw0dR5SQ7+0JuQ8s36sdbd50sisrVGbtzVLDTBjCFEYMSgylPI3palcq8/elCY5icFpr7OqWoisxinWkiAisBjWGHcN7o0xgPtZ7DS2TTJHHjY1DYUwPTZLPCKU3ms4vIZnfFPHLuUQIwRjuU1VMrtNC0cTA6hEhBstrofeJ17mF0R7St6VC5utOdKiSTnIjQdKpSUanzgl0GRhYANfxP8MzxKQo/6SrbAgh3WP8lYfDn22LmCPx2G1+6nu599gmcOXe7xT+HkQEISD8OXvgSvqeQguD7wpSMNRSjqUunc66e5Hrn67J6RYKFziUeEM1LNcDFEtaK0esPE6TYKpHh00bArFFL/7avZzSJ/BBH6H7piwBjoj9wk9vXn5H5wcWcQf7thCqVAAzZvdKSaTpcWH5TKbJm+8LsTl2UIf0W4ss3h6WYINhBVg= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2025 17:19:49.8167 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 80a7083d-73a8-4d6f-9ac3-08dd4ac04a6e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000989EB.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4082 Initialize and check the return value in hash *do_one_req() functions and exit the function if there is an error. This fixes the 'uninitialized variable' warnings reported by testbots. Reported-by: kernel test robot Reported-by: Dan Carpenter Closes: https://lore.kernel.org/r/202412071747.flPux4oB-lkp@intel.com/ Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-aes.c | 10 ++++++++-- drivers/crypto/tegra/tegra-se-hash.c | 7 +++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index c7bb6f951a84..5ca7996ecc6d 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -1602,18 +1602,24 @@ static int tegra_cmac_do_one_req(struct crypto_engine *engine, void *areq) struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); struct tegra_cmac_ctx *ctx = crypto_ahash_ctx(tfm); struct tegra_se *se = ctx->se; - int ret; + int ret = 0; if (rctx->task & SHA_UPDATE) { ret = tegra_cmac_do_update(req); + if (ret) + goto out; + rctx->task &= ~SHA_UPDATE; } if (rctx->task & SHA_FINAL) { ret = tegra_cmac_do_final(req); + if (ret) + goto out; + rctx->task &= ~SHA_FINAL; } - +out: crypto_finalize_hash_request(se->engine, req, ret); return 0; diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c index b4a179a8febd..0ae5ce67bdd0 100644 --- a/drivers/crypto/tegra/tegra-se-hash.c +++ b/drivers/crypto/tegra/tegra-se-hash.c @@ -437,14 +437,21 @@ static int tegra_sha_do_one_req(struct crypto_engine *engine, void *areq) if (rctx->task & SHA_UPDATE) { ret = tegra_sha_do_update(req); + if (ret) + goto out; + rctx->task &= ~SHA_UPDATE; } if (rctx->task & SHA_FINAL) { ret = tegra_sha_do_final(req); + if (ret) + goto out; + rctx->task &= ~SHA_FINAL; } +out: crypto_finalize_hash_request(se->engine, req, ret); return 0; From patchwork Tue Feb 11 17:17:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 864190 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2086.outbound.protection.outlook.com [40.107.243.86]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9DB3B262D1C; Tue, 11 Feb 2025 17:20:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.86 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294418; cv=fail; b=VjChUpjwybD3b/ytasejLGsbN2BbcWQUjMe7kB4mPkPxu46FEbL9HGWmGlSA49UqiFqywFLPBT9pMsOM2ax72TknzFcldb0BbZbrCeUq3JIv3Qmg2kCUo+FXsvDmFhfiVcI6Mte5Ttt46Lsu/gecGfDIoLFU7UxjnQXwFn7/SLQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294418; c=relaxed/simple; bh=Ovyb5TaYIJB4Uhw5leOKopG3qWtS3qt8CuMeEgIbVpE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Zd51qcBPNFXUiFUXUP2fQHrErux+OrIelxEnuYNaViYtq1uzoQeUa8pdgIra/jX8KFiwYh53tUSp+BOoIGxa9Tw8dmqaYk/Ro9zJO3dPUXnnJJSyf3OO/7sSihWzvU0ZVWRNYBlEhXw8kPIRFF2DQbqRFfjlBosnsJAwBgXndng= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=MQFFwaOz; arc=fail smtp.client-ip=40.107.243.86 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="MQFFwaOz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=o1zvdtQBKKpObvfwE1rcSIYF+o0+M8iO5kI634QlhgUL0uugIzQb49kjR+JubqCqYtuXaaKuWCX4/29NtHr+g4Fh2fK4jwplErOiHu+2sgYj7lyqDv6ORJxk1TbDXEgpkfCXLXdC/76iNencB6uErzcaJwoCUvcxdUmA5iysjF4huiLlFggujQXxlBcF2LNwzg5PXRBqbY53Ymu6JnmfYU8BJI0Eh9GZ/BOmagdPFwrz4fQXXTZp02ltpZARn0YyPa1l8qgDw+LTErmaas4Sb4VIesnHowTPUJGBofusBtt7HtREWttJLapTsEvcxC6NsUtkOcEimz1ywQrEldxxiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=174cNErxa6PPINw/pp9tanQO9Vxu0GYoUE1mXDdWZXk=; b=FgkEEQQ8QM9M2FyfjK+fxiA82IzpCoic6DCt30tAjtzrrNbvaf+87sokIMFyQGcyC7Y/Ne2eq3NkyArRmWImThW0GnPsnGDSRF58FgKB2ww6a8hL5+IX1U9Hl+8UNiRSGevhNheusvf0Qbz+RPyJtg+EFgBj8Tfwv2/Fym3YTlOd7mFypOV6c64CavH5kScjRxijLA9exzIkH6iDffNpdbpec5qTuQ7EnGt67H6wbahwE+PUYo33FDXT5ofE9VGt1Phdh13IyPU21IODShrUqTK9JVjpsQhw//pf9LafsvH6ZWDKU3Y6BBY6jxP1A41S9yLNcW8vUy7LB8xttkW44A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=gondor.apana.org.au smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=174cNErxa6PPINw/pp9tanQO9Vxu0GYoUE1mXDdWZXk=; b=MQFFwaOz1W3JHeyJrcrStZl8hkGdIyvygykO2jPGSvqYJnJfAxiBueT1K6nIzckiBWlWQCHDCe6MU5Uj3hVopatNjPSM2kg1RJLHzldbSQczlWK/M0Ub6T+dKquXKrAfYQp6ADOS1T8gtWf0nnpVgpWvry9Hs+r841GlWSTb/GMSrbY+MQCRmEoNfbY7prqdB+xkLjbLQyes5o2hKN1w0sl5QKYJAowocgMnvQYuTGLZrxO/20WPqs3k3vbYbXIsdAgSQOti+vxdg03C02bReVza7OiIRP+TQUge5kM89WxtXXIgXrMHc71SiSnFs2JoBnc8biwzcs17XLzD55c2Yg== Received: from DM6PR13CA0018.namprd13.prod.outlook.com (2603:10b6:5:bc::31) by SJ0PR12MB7474.namprd12.prod.outlook.com (2603:10b6:a03:48d::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.11; Tue, 11 Feb 2025 17:20:10 +0000 Received: from DS1PEPF00017092.namprd03.prod.outlook.com (2603:10b6:5:bc:cafe::e8) by DM6PR13CA0018.outlook.office365.com (2603:10b6:5:bc::31) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8445.11 via Frontend Transport; Tue, 11 Feb 2025 17:20:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by DS1PEPF00017092.mail.protection.outlook.com (10.167.17.135) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Tue, 11 Feb 2025 17:20:09 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 11 Feb 2025 09:19:59 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 11 Feb 2025 09:19:58 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Tue, 11 Feb 2025 09:19:56 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v2 06/10] crypto: tegra: Fix HASH intermediate result handling Date: Tue, 11 Feb 2025 22:47:09 +0530 Message-ID: <20250211171713.65770-7-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250211171713.65770-1-akhilrajeev@nvidia.com> References: <20250211171713.65770-1-akhilrajeev@nvidia.com> Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017092:EE_|SJ0PR12MB7474:EE_ X-MS-Office365-Filtering-Correlation-Id: 3d8a778b-d27f-4ce7-61a9-08dd4ac0565e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|36860700013|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: COf2Afs4Cwq9/ACRE/dDa29Q50Hx9wDQZLPP1jdruFIRxU5PqNyZ1mVWXncdGBy55tyHtgl8IJwz5PigPWjzsmnphPMz0bfe8cgbQ1zhKGK2GHA3g2brAjaPNrWisAFRHILki0UF0/F3K/HAl+ERY2J+nCgPFZPc70Md4SJ8zn99CEUbGkpzjVWx94JsCgs/9WzbYnvNSpS+UxSc12SeJjpwFyu0nJn7FSCCPb4r/WRyxlnoJgDO3DnGiEKI84OATgYleg5zWvyaPRKhX6sdKZp3wqxoe3funz91yVlNq8xB76bFOu87TMDgjMtI/HFfIoyrBveiThr5Sqj9Mve9HaR7rxfD7eykALlzPz+W7ZRdrzqJ/rS9623DG3YqTb0V3zhMaq474lVu9+o45lXJz2duKqg+oUI1+rMFBBcHUQft+ygQ0uNDtULo6j/F4KPPvRbCiTxZM4unwk59LUz94lG++XzIZFM5nhrKZemR2+7c/6JLGSkJKi/0NKB5K0sOMrKQskK/RkPtVlq8EEuDcOgh/OORCpeDoi1yD2OTCX2ny9cWIFGgqAeR6rkXr4NTq7mukqS25v2MgmwC+XGI3JQLjommenE7YCNSfRglrllL5HGSj7fDRz4MqZG//q2y/voW2y3918EtpGXeaa5soID8dscgkMg0dlQ+bEUgN4nv7w5llV0IpbVOvPf/joGtoMv8gH8WfSqVAK2HetV3+cwTL3CYliYXkTXxoQCeMIfwX1dkvrlB3Oq3HilOBqGJGQqRhADaavtOpDv0Mt+o4jYIC53fqqZUQL6IkUG5PwcDMKJfFIONbU/N2Fe62TWyC3WJqEk4Ieh+2nGZV/wseaF+voIEXLzZb0K3qdWRr/xqdFE+d34wWqQOk9yKEzEZyWeL0SlNAH/rp25Cwwb9FW+3OiC8DDGr5edOmq0oHnHM5j35uAdrYPEC/UkaXZs15zXE+BIQZi/Wsnkt3B7q3jtd47bjUeOZEi6gLBlE5QSWVnzWgiHYY3alEisB58zMisGV77mIEOVnfROdEGEaPQriXVpQMapYWUR+HjbCiuGXHP1ktn0InFGp1XtpkMgQQh/a/LCsVuTNk4xRwj/BQoQ8HpWcF57PCP6A2DMfqcvuyaN93qr+5pDxy7YzX+GBiQUYpJzjWJmIWCWsatQsYRKbit1FL1O4yTBOauyIOh24qIiBBbD8baHMj8+NCHIxqAwu6rRuu7h0P4kQ1TL5XMJ7W+wC78C8TiHkbWMmA2UPJxLz1Tnz5iZtfUZ7m6G0kD+I52JdlhaTZh4zatBrn15j10YcXRG4OLd9hREOfhlWiYxEj1VrWInIfgsFv0V9HB3O8CguDOiUW+hVea1Z0b/M7XX9XK2pGqXOdZJB7TdlSQ4grcWax3DUvPnW6wPCBi9Mw8Z0Zh4CNQa75w64xPIF5SgjMqwlhETn4DjIg9irW/x8IRLGPCW+uJHuoWmCQq3c7vXNlr1YHxZA8utW2cqfbRULxEl7sTI5rZAhODc= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2025 17:20:09.8274 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3d8a778b-d27f-4ce7-61a9-08dd4ac0565e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF00017092.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB7474 The intermediate hash values generated during an update task were handled incorrectly in the driver. The values have a defined format for each algorithm. Copying and pasting from the HASH_RESULT register balantly would not work for all the supported algorithms. This incorrect handling causes failures when there is a context switch between multiple operations. To handle the expected format correctly, add a separate buffer for storing the intermediate results for each request. Remove the previous copy/paste functions which read/wrote to the registers directly. Instead configure the hardware to get the intermediate result copied to the buffer and use host1x path to restore the intermediate hash results. Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-hash.c | 148 +++++++++++++++++---------- drivers/crypto/tegra/tegra-se.h | 1 + 2 files changed, 97 insertions(+), 52 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c index 6da18f0f7ce9..89c1e1a0016b 100644 --- a/drivers/crypto/tegra/tegra-se-hash.c +++ b/drivers/crypto/tegra/tegra-se-hash.c @@ -34,6 +34,7 @@ struct tegra_sha_reqctx { struct tegra_se_datbuf datbuf; struct tegra_se_datbuf residue; struct tegra_se_datbuf digest; + struct tegra_se_datbuf intr_res; unsigned int alg; unsigned int config; unsigned int total_len; @@ -211,9 +212,61 @@ static int tegra_sha_fallback_export(struct ahash_request *req, void *out) return crypto_ahash_export(&rctx->fallback_req, out); } -static int tegra_sha_prep_cmd(struct tegra_se *se, u32 *cpuvaddr, +static int tegra_se_insert_hash_result(struct tegra_sha_ctx *ctx, u32 *cpuvaddr, struct tegra_sha_reqctx *rctx) { + u32 *res = (u32 *)rctx->intr_res.buf; + int i = 0, j; + + cpuvaddr[i++] = 0; + cpuvaddr[i++] = host1x_opcode_setpayload(HASH_RESULT_REG_COUNT); + cpuvaddr[i++] = se_host1x_opcode_incr_w(SE_SHA_HASH_RESULT); + + for (j = 0; j < HASH_RESULT_REG_COUNT; j++) { + int idx = j; + + /* + * The initial, intermediate and final hash value of SHA-384, SHA-512 + * in SHA_HASH_RESULT registers follow the below layout of bytes. + * + * +---------------+------------+ + * | HASH_RESULT_0 | B4...B7 | + * +---------------+------------+ + * | HASH_RESULT_1 | B0...B3 | + * +---------------+------------+ + * | HASH_RESULT_2 | B12...B15 | + * +---------------+------------+ + * | HASH_RESULT_3 | B8...B11 | + * +---------------+------------+ + * | ...... | + * +---------------+------------+ + * | HASH_RESULT_14| B60...B63 | + * +---------------+------------+ + * | HASH_RESULT_15| B56...B59 | + * +---------------+------------+ + * + */ + if (ctx->alg == SE_ALG_SHA384 || ctx->alg == SE_ALG_SHA512) + idx = (j % 2) ? j - 1 : j + 1; + + /* For SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 the initial + * intermediate and final hash value when stored in + * SHA_HASH_RESULT registers, the byte order is NOT in + * little-endian. + */ + if (ctx->alg <= SE_ALG_SHA512) + cpuvaddr[i++] = be32_to_cpu(res[idx]); + else + cpuvaddr[i++] = res[idx]; + } + + return i; +} + +static int tegra_sha_prep_cmd(struct tegra_sha_ctx *ctx, u32 *cpuvaddr, + struct tegra_sha_reqctx *rctx) +{ + struct tegra_se *se = ctx->se; u64 msg_len, msg_left; int i = 0; @@ -241,7 +294,7 @@ static int tegra_sha_prep_cmd(struct tegra_se *se, u32 *cpuvaddr, cpuvaddr[i++] = upper_32_bits(msg_left); cpuvaddr[i++] = 0; cpuvaddr[i++] = 0; - cpuvaddr[i++] = host1x_opcode_setpayload(6); + cpuvaddr[i++] = host1x_opcode_setpayload(2); cpuvaddr[i++] = se_host1x_opcode_incr_w(SE_SHA_CFG); cpuvaddr[i++] = rctx->config; @@ -249,15 +302,29 @@ static int tegra_sha_prep_cmd(struct tegra_se *se, u32 *cpuvaddr, cpuvaddr[i++] = SE_SHA_TASK_HASH_INIT; rctx->task &= ~SHA_FIRST; } else { - cpuvaddr[i++] = 0; + /* + * If it isn't the first task, program the HASH_RESULT register + * with the intermediate result from the previous task + */ + i += tegra_se_insert_hash_result(ctx, cpuvaddr + i, rctx); } + cpuvaddr[i++] = host1x_opcode_setpayload(4); + cpuvaddr[i++] = se_host1x_opcode_incr_w(SE_SHA_IN_ADDR); cpuvaddr[i++] = rctx->datbuf.addr; cpuvaddr[i++] = (u32)(SE_ADDR_HI_MSB(upper_32_bits(rctx->datbuf.addr)) | SE_ADDR_HI_SZ(rctx->datbuf.size)); - cpuvaddr[i++] = rctx->digest.addr; - cpuvaddr[i++] = (u32)(SE_ADDR_HI_MSB(upper_32_bits(rctx->digest.addr)) | - SE_ADDR_HI_SZ(rctx->digest.size)); + + if (rctx->task & SHA_UPDATE) { + cpuvaddr[i++] = rctx->intr_res.addr; + cpuvaddr[i++] = (u32)(SE_ADDR_HI_MSB(upper_32_bits(rctx->intr_res.addr)) | + SE_ADDR_HI_SZ(rctx->intr_res.size)); + } else { + cpuvaddr[i++] = rctx->digest.addr; + cpuvaddr[i++] = (u32)(SE_ADDR_HI_MSB(upper_32_bits(rctx->digest.addr)) | + SE_ADDR_HI_SZ(rctx->digest.size)); + } + if (rctx->key_id) { cpuvaddr[i++] = host1x_opcode_setpayload(1); cpuvaddr[i++] = se_host1x_opcode_nonincr_w(SE_SHA_CRYPTO_CFG); @@ -266,36 +333,18 @@ static int tegra_sha_prep_cmd(struct tegra_se *se, u32 *cpuvaddr, cpuvaddr[i++] = host1x_opcode_setpayload(1); cpuvaddr[i++] = se_host1x_opcode_nonincr_w(SE_SHA_OPERATION); - cpuvaddr[i++] = SE_SHA_OP_WRSTALL | - SE_SHA_OP_START | + cpuvaddr[i++] = SE_SHA_OP_WRSTALL | SE_SHA_OP_START | SE_SHA_OP_LASTBUF; cpuvaddr[i++] = se_host1x_opcode_nonincr(host1x_uclass_incr_syncpt_r(), 1); cpuvaddr[i++] = host1x_uclass_incr_syncpt_cond_f(1) | host1x_uclass_incr_syncpt_indx_f(se->syncpt_id); - dev_dbg(se->dev, "msg len %llu msg left %llu cfg %#x", - msg_len, msg_left, rctx->config); + dev_dbg(se->dev, "msg len %llu msg left %llu sz %lu cfg %#x", + msg_len, msg_left, rctx->datbuf.size, rctx->config); return i; } -static void tegra_sha_copy_hash_result(struct tegra_se *se, struct tegra_sha_reqctx *rctx) -{ - int i; - - for (i = 0; i < HASH_RESULT_REG_COUNT; i++) - rctx->result[i] = readl(se->base + se->hw->regs->result + (i * 4)); -} - -static void tegra_sha_paste_hash_result(struct tegra_se *se, struct tegra_sha_reqctx *rctx) -{ - int i; - - for (i = 0; i < HASH_RESULT_REG_COUNT; i++) - writel(rctx->result[i], - se->base + se->hw->regs->result + (i * 4)); -} - static int tegra_sha_do_init(struct ahash_request *req) { struct tegra_sha_reqctx *rctx = ahash_request_ctx(req); @@ -325,8 +374,17 @@ static int tegra_sha_do_init(struct ahash_request *req) if (!rctx->residue.buf) goto resbuf_fail; + rctx->intr_res.size = HASH_RESULT_REG_COUNT * 4; + rctx->intr_res.buf = dma_alloc_coherent(se->dev, rctx->intr_res.size, + &rctx->intr_res.addr, GFP_KERNEL); + if (!rctx->intr_res.buf) + goto intr_res_fail; + return 0; +intr_res_fail: + dma_free_coherent(se->dev, rctx->residue.size, rctx->residue.buf, + rctx->residue.addr); resbuf_fail: dma_free_coherent(se->dev, rctx->digest.size, rctx->digest.buf, rctx->digest.addr); @@ -356,7 +414,6 @@ static int tegra_sha_do_update(struct ahash_request *req) rctx->src_sg = req->src; rctx->datbuf.size = (req->nbytes + rctx->residue.size) - nresidue; - rctx->total_len += rctx->datbuf.size; /* * If nbytes are less than a block size, copy it residue and @@ -365,12 +422,12 @@ static int tegra_sha_do_update(struct ahash_request *req) if (nblks < 1) { scatterwalk_map_and_copy(rctx->residue.buf + rctx->residue.size, rctx->src_sg, 0, req->nbytes, 0); - rctx->residue.size += req->nbytes; + return 0; } - rctx->datbuf.buf = dma_alloc_coherent(ctx->se->dev, rctx->datbuf.size, + rctx->datbuf.buf = dma_alloc_coherent(se->dev, rctx->datbuf.size, &rctx->datbuf.addr, GFP_KERNEL); if (!rctx->datbuf.buf) return -ENOMEM; @@ -387,31 +444,15 @@ static int tegra_sha_do_update(struct ahash_request *req) /* Update residue value with the residue after current block */ rctx->residue.size = nresidue; + rctx->total_len += rctx->datbuf.size; rctx->config = tegra_sha_get_config(rctx->alg) | - SE_SHA_DST_HASH_REG; - - /* - * If this is not the first 'update' call, paste the previous copied - * intermediate results to the registers so that it gets picked up. - * This is to support the import/export functionality. - */ - if (!(rctx->task & SHA_FIRST)) - tegra_sha_paste_hash_result(se, rctx); - - size = tegra_sha_prep_cmd(se, cpuvaddr, rctx); + SE_SHA_DST_MEMORY; + size = tegra_sha_prep_cmd(ctx, cpuvaddr, rctx); ret = tegra_se_host1x_submit(se, se->cmdbuf, size); - /* - * If this is not the final update, copy the intermediate results - * from the registers so that it can be used in the next 'update' - * call. This is to support the import/export functionality. - */ - if (!(rctx->task & SHA_FINAL)) - tegra_sha_copy_hash_result(se, rctx); - - dma_free_coherent(ctx->se->dev, rctx->datbuf.size, + dma_free_coherent(se->dev, rctx->datbuf.size, rctx->datbuf.buf, rctx->datbuf.addr); return ret; @@ -443,8 +484,7 @@ static int tegra_sha_do_final(struct ahash_request *req) rctx->config = tegra_sha_get_config(rctx->alg) | SE_SHA_DST_MEMORY; - size = tegra_sha_prep_cmd(se, cpuvaddr, rctx); - + size = tegra_sha_prep_cmd(ctx, cpuvaddr, rctx); ret = tegra_se_host1x_submit(se, se->cmdbuf, size); if (ret) goto out; @@ -461,6 +501,10 @@ static int tegra_sha_do_final(struct ahash_request *req) rctx->residue.buf, rctx->residue.addr); dma_free_coherent(se->dev, rctx->digest.size, rctx->digest.buf, rctx->digest.addr); + + dma_free_coherent(se->dev, rctx->intr_res.size, rctx->intr_res.buf, + rctx->intr_res.addr); + return ret; } diff --git a/drivers/crypto/tegra/tegra-se.h b/drivers/crypto/tegra/tegra-se.h index e1ec37bfb80a..0f5bcf27358b 100644 --- a/drivers/crypto/tegra/tegra-se.h +++ b/drivers/crypto/tegra/tegra-se.h @@ -24,6 +24,7 @@ #define SE_STREAM_ID 0x90 #define SE_SHA_CFG 0x4004 +#define SE_SHA_IN_ADDR 0x400c #define SE_SHA_KEY_ADDR 0x4094 #define SE_SHA_KEY_DATA 0x4098 #define SE_SHA_KEYMANIFEST 0x409c From patchwork Tue Feb 11 17:17:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 864189 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2064.outbound.protection.outlook.com [40.107.94.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3F2B262D12; Tue, 11 Feb 2025 17:20:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294444; cv=fail; b=hhEOgWp9waUMWoR18VqHIpmIlM+c0sl6sNq0WDx3sjP8q/sreUJYLlLjipVqXknbKht/VRFyrs6TUxCyN7cXr9wiOSKTugXtmLmz+UFtvXqwikqnqRw7ulwkn6v52RVAFShEwQM2GlKWgvr7U0cSQESmlmZgAVEFwqfDTrEGTk0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294444; c=relaxed/simple; bh=S+079rxoA9BdyKsFTQlEvE116ubEHsAMr6u+2r9bMZM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VK0PNO0GyigFj/1mS0d5yQnbXu9K5JxIN1Vba+2OHio0e9QDUBkItRNAxM8MQraobM+EYzlxzGjGWJLuypKxFfMwpV7fpCIgQ6P7NTs01XQtgUW5D19/rqro0LxZizPv0P4VP5JltloNzuQD3PX1O8UUpum/vmpQtPmZWRcnr5E= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Pgpb3oMj; arc=fail smtp.client-ip=40.107.94.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Pgpb3oMj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SLQYzvFc3iqNBf5a6WIn4gv2KY6ALb7dAjU2C9yvVpjtu3czP7mSGVZgjq8UqmkMZilMSdXWP9nYFbXtrPrH08Nv+PUseyyXh0xOqM2WQBP+kjBvHiW9NN2A/+fozOj19Za/hGfJPyzM454T7YegsVjdOKdd2Wy8UDN3GuEucCS0qSM0MTi6DeFKZ2ruXumfWH4iBZVLJyXuk1vjm2bxFpLFX4kH+pDCeRzG3gWsLircIVsnKAmvRUzVso/ZQX/i+ojd0XbSaCqK3eMNl6eJ7h08YUB+taegpglhOdPQ5xJJGo2OoLdUkHeE2arpSAI5L3WLmeUeJRSMHpvPxeZM6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=H6w45/3xytAm2JPRSKOkeS9Fjhl8mfnTk+c4KhL3DS8=; b=pAstu9UI/DTeQ7N4rNPxJPrYnD0coK+okrFWd75bbwpk5voLa0l6JVYA8PZcDFEdx24mGQyZzqk9TbKarOBgv4kwBMWuXTUobfrqNjTKCqdkOeHPl9dD8+4t0cbC5fhIqiU6EyCaCdRN/sp7e4uLXI60uYCYEXM7ZIkdCoPS2feb/xqH3Xzei0AcGoEKqyqAGfkyAWoRlj0RR2Cjb57EcM1SD3FJhoOSEsgzST7Io36jO1ntcpgRxb2ftEytBL3XsmrnK/QmbHYryfu7untjnmT3ckISMRmH/WiWngYVmcWyYClhchyuhhm6q4RECQ0/MgSTFYWERc26mK78E9VpLQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=gondor.apana.org.au smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H6w45/3xytAm2JPRSKOkeS9Fjhl8mfnTk+c4KhL3DS8=; b=Pgpb3oMjIe/4yhEoWBKJWeCISPxtOTKKomlv/l2ztM/BNtJ4z4xTrSkCra+o7SixtDC8gekRnwi8lF9b5sMtvNdAEPNtbHJRLRYHkIKxT/K8x5F+nl2HL+h2QZnRatClocIfUCR8luuGxfmhOM0MvTYUqCEaM8AoD8w5dePyBH7Jl3cpHQQxnKEr19XE1KM+/5+wZqIqFyI+jOzjWHDaFh4JU5ntmGdmQ2Fmx8UrwsOkV/1Vvzm20EVFC1KpmXUqhRQWzGwaonvOXwc0LquWhA4ieXgEt+S7jOhftpb4PsTwIceREljm0a6MUqrwoqSIHx7qDGFfa9F3iZqe6VSeVw== Received: from DS7PR03CA0007.namprd03.prod.outlook.com (2603:10b6:5:3b8::12) by SA1PR12MB8987.namprd12.prod.outlook.com (2603:10b6:806:386::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.18; Tue, 11 Feb 2025 17:20:37 +0000 Received: from DS1PEPF00017091.namprd03.prod.outlook.com (2603:10b6:5:3b8:cafe::b2) by DS7PR03CA0007.outlook.office365.com (2603:10b6:5:3b8::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8445.12 via Frontend Transport; Tue, 11 Feb 2025 17:20:37 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by DS1PEPF00017091.mail.protection.outlook.com (10.167.17.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Tue, 11 Feb 2025 17:20:36 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 11 Feb 2025 09:20:21 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 11 Feb 2025 09:20:21 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Tue, 11 Feb 2025 09:20:18 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v2 08/10] crypto: tegra: Set IV to NULL explicitly for AES ECB Date: Tue, 11 Feb 2025 22:47:11 +0530 Message-ID: <20250211171713.65770-9-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250211171713.65770-1-akhilrajeev@nvidia.com> References: <20250211171713.65770-1-akhilrajeev@nvidia.com> Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017091:EE_|SA1PR12MB8987:EE_ X-MS-Office365-Filtering-Correlation-Id: 37d71d8b-aede-4a4f-18c7-08dd4ac06663 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: OiSy15e2XsPMRUNZMBqS79/WYkew746CH8t6fJF3CT4anKxEs6E4UDrAMJ0soKB8m5EOnH92C76qUXXXX2feCaFQzIiNMye70f9y1gPL5/lpi6D1LLAQP+gG0XXWhy9ah71i44xy/jy3ody/xySXiiKXvWK88576nFH3kP8cahfoKFGv0AdE+pysVjZO9b5YPJDqfCHaGcv7pEBUrO+Og9RhNxlnW+fY390/bfuK+keD/G5m08WuXqjgI/DmZ2MqWqX20sCsP45gW8zjpwhPmJylgy6iZJklK10J4ohfwEylsXblwbFNz0ih2hHMNmABlhuR34TVp76iXoC8k2G0zhDbrhyz/RzV2uE8rJ2Pn7haUA91cD+i44Flq0Feok+woWMCWbsnBc872PvrhdyCTDlZgoadiiJzZum3RVJkU27kFbZka+p9DJleQ6nJifyabQxmlkkXjFdI05yGG1WnsySMYWES7bRgTGfHjRFXBTsFgxT/HHd/Oxm2digLsq9S2dpejysHaxdE/serZbVAK6rMmTfv8ZY5fL8REjEqKJvu/Wv+thTt0m0Ht6G1340HErNTwCoix8DOTFSRAn/4ruhSPSeKYG9zwK/oDKfTxFvbwieMYt1dQqVwrVnItURt+F64emfd+WoUkFiq7mLpWfjt5zJejeeZkhI854M/cuvyNqfS6UN33kbJBM5vqwJqoyaTC7JP3WPkM2oHtR5JIt2RLREUEh7anBT9RwEqRDpfnRa1AOXzheMA9UH/BhKeOrAmsX2myw5fEsYprI7fuy3GSY89KQATNClV4KjtX8NkRWBXgIhh1um/eQsmn789kRIR9YeGiw38OCACiOZ3dIuDs50pHCcUcniCpaBsl4BponqYp7+PZAJoREQFuEyHPc4+LhLbn9swHgzFNzefVgoBgusYYdUulV8UcjpE+/M4Uck4KkMXtmtKUEfmJzolImgIGH2mkTxZBqFInsMzQayIxwFUwoPIFMgzZbwW2JFiPV3eNreBIO4iG+U5P/BXBA8aUalxMOogx3fjKXIysNDM0Y0/8fZO8MuGeVxzV99aHbI+/RWKOPFoTBWvq5wwiUcFxq4XtvysJkCkMongCLn35sQF4MT1htaIq4EgMIG/cGVCh3Lisubi/NoItdbOPrjSvQhQEaCR3rSYsFyWyyWH71ubcuIi6wnGd57823Fie3OOPY37TpUJ3fkkqhUbUXFidPJqt+7tWnjSssP+LDVf64mqb0NWsvoYOqkjUnN9LN7osvGlXTmzJr7Q7s7gclCtpbR/OX+nwqVKiC+HWkWoT54M6urRCNOM4dNBt7h0rCLOYaMgfUk20wmtJkuhz9JwV33If32HX8jARAmDTO960YsS/24wO/Ua0iZPkhLPytKD798AwSd1NJt7FzZMF531Ng8EiwrgmM2Nsk6dgaUlrIQbqbvGnLakFWyWUq4WXrAwQjh/KL/FhW4MukIFzavjG584Y7aRkG8LVoCa/nx3lSfF6o4HhpolMMOLECc= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2025 17:20:36.6706 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 37d71d8b-aede-4a4f-18c7-08dd4ac06663 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF00017091.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8987 It may happen that the variable req->iv may have stale values or zero sized buffer by default and may end up getting used during encryption/decryption. This inturn may corrupt the results or break the operation. Set the req->iv variable to NULL explicitly for algorithms like AES-ECB where IV is not used. Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-aes.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index c97dc2043b3d..196f3b7ad7bb 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -446,6 +446,9 @@ static int tegra_aes_crypt(struct skcipher_request *req, bool encrypt) if (!req->cryptlen) return 0; + if (ctx->alg == SE_ALG_ECB) + req->iv = NULL; + rctx->encrypt = encrypt; rctx->config = tegra234_aes_cfg(ctx->alg, encrypt); rctx->crypto_config = tegra234_aes_crypto_cfg(ctx->alg, encrypt); From patchwork Tue Feb 11 17:17:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 864188 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2085.outbound.protection.outlook.com [40.107.236.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C574262D21; Tue, 11 Feb 2025 17:21:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.85 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294474; cv=fail; b=Co59ygllmvpceEyTjPEyeUrab3tlq/8AvWXdWgB33Qw8hkpIr3NawPkh+oZcM+ZZpAp6c7tOn6nCLJ/8jd9EVhSV9cUZGbFJBqBtyLuMla/KLWNqLKBSygwGjMS1x4Sjn/RSCA3rjRhM2w8D1s2y9o+1dmZ6vdy3pZfe95NaVCM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739294474; c=relaxed/simple; bh=37W3yOA3j/RWRFmUR0HLIPlC8kpGry9zzti8PefNSrg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JWFlCAI/qPUUVFOeoZIzZQLkS+gbCqyS0eJDUUCoTdQ67pJ3I3wZUDjH5Y06v+vBxWZSSf0JyELD2G7zUgIrxpNGL5IwUcQ9hCx/CYRw2vZ3T0W4ps28arXj+WGbP1zto+/ZRbWwckSFCg0jSexQ2Hh53oxDTdwtJ55HlK8X7o4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Pa5CMcHa; arc=fail smtp.client-ip=40.107.236.85 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Pa5CMcHa" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JK7I4N+limHnlSh2eSPA/LSh0r3l/9Hr/a1w0GO2JJB9LNzb1ZYnmUJCO4wZ98POuxtHGY0xDeU7mkxNjC6Chhm8NNUb04RPUCxl6uYV6xFX0efcoYI/iwSB2XT6dkw1ZOssoCOG+5LB8vFXkNWG6qjftXJHNEy9IFx4YMktiE1Az7i3uonIgM9S46ifTJnoRFkuSEng6pZFw31M7e9M06m3zkpKaE6pQs++5LtNusGYhscUvjuj/A96Wfj34/tBN+MM5vUXB9G5vKbv33qsHlziVdB9roSX0top1bjlFGL+zWKFvTX0jwwG5wSbH4Tk9SJ9Kfd9QLw8EOAPxL+jJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2xkh8gOUn+tIzldnXrb/Kpm4oA/hXqAd1LJMDcwDARU=; b=ury7+Spupsbq1ZIwvw99kPViVaK9RmG5mLS8xUcxCw4DhkoIX8Nel3AMG0paqDGRUQaHxzHa1mQu6Qt4nCWV4P47OT/eDZKZhrYdJyKRTH22TulKk0XxnK5qbgwbsJzuEVn+R7/SkxHuHlY5mfBaTCbulbbQ7LpFIyfwZnl22OjF2xOx/2Xb3OTPRT/qPbpvlKWdCJASMX1REjJNg+SbYi93xsAUT3quMNKHiZG4b7BcW5PFGEijLiLLn9utD7Nx/naqTeFL/wFVWALwE659hyvJfmzrG1Cg9mO+v4R39FZWLd7b38wLJworFzKSn621X/ue2z1ReXQ94l7v3K2Vyw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=gondor.apana.org.au smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2xkh8gOUn+tIzldnXrb/Kpm4oA/hXqAd1LJMDcwDARU=; b=Pa5CMcHa+lkvMvuH2RukCtscbvzlPDnfUofOTr/WUO9z5ZL5Xe1ole2JnjDxIWEbkcB84D3yjGNwf/R/SZeOmxXtMF99fxNbe0P0wdjBOcnQOhl5UaJA9tkuCbelNfwnQRo1ht5DtBOfR6MYRi/GfyKkQMnJx1mmRE7Q1xlHzBGE7ve5gQwGZ8AlwpWGF3f9xhsTPd19taFcmD0tWFoIYY7k4sWocfBG/lG6NNw7OhfvNh3+GVjDV2aZ2EleH/EEvs1b/9b3dI3uXbke7gqzA+GAc5MwHSD+FgyaMOqltDt7dDfDA3j0xM0r7h5HoKoWzoFEN0+Kx5Mqyk0FXDrDIA== Received: from DM6PR08CA0037.namprd08.prod.outlook.com (2603:10b6:5:1e0::11) by DM6PR12MB4108.namprd12.prod.outlook.com (2603:10b6:5:220::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.11; Tue, 11 Feb 2025 17:21:07 +0000 Received: from DS1PEPF00017095.namprd03.prod.outlook.com (2603:10b6:5:1e0:cafe::ce) by DM6PR08CA0037.outlook.office365.com (2603:10b6:5:1e0::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.31 via Frontend Transport; Tue, 11 Feb 2025 17:21:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by DS1PEPF00017095.mail.protection.outlook.com (10.167.17.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Tue, 11 Feb 2025 17:21:07 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 11 Feb 2025 09:20:44 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 11 Feb 2025 09:20:44 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Tue, 11 Feb 2025 09:20:41 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v2 10/10] crypto: tegra: Use HMAC fallback when keyslots are full Date: Tue, 11 Feb 2025 22:47:13 +0530 Message-ID: <20250211171713.65770-11-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250211171713.65770-1-akhilrajeev@nvidia.com> References: <20250211171713.65770-1-akhilrajeev@nvidia.com> Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017095:EE_|DM6PR12MB4108:EE_ X-MS-Office365-Filtering-Correlation-Id: ef9ff5fc-8fc2-43cc-ccab-08dd4ac07884 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: O3PzD+nocRCCb5EqzABvpZ8ph1Uv7K/60aZ+aKA3nqH9jJXiJ8SpMECBBSKriAcJlgesWDpqrCRgX2Gl0LyCUBDg50/sZonlX+wD6qMHUfVnaigUIlnjVI+8u4Ly6EUxPDiw+Yf6M07cb8z6IqSGIJ77+vABSWlFnO2GXwaOlKrZ88JLdYPEM6XCMwe5ciu+iKHYSwY+85/5OLiEWXESKr9BOAPJy8t5CYfWnai4C1JXv/UWGKGFQ+9SUKOsS+uwy4j1rV+S+Hx9Cw0RbEB98V2DN1tXMrLmDrOaP45NGqLA3eE/gFcxlw7B1NfhiAg5Jbb0vboEKS2kIu1B630nlvUZtlEagz2qu9vN/7RshLXmoSUzQp/lsYFr4H6Y1/2zdJxQGGZfHR13gjxtJhjuvsFixYOUjSecGLYLg5joCCyA7lj4qP1/agh3MMEL/imibbgcN7Ej9ayaO00ahlDj2ikIEc4cyjQP0/0CU6fOOv6Ph9qUF1EEsJtyvnHWpkS8sMenAlkBD0tuTFDbBnku5+cV2NVwmDiam+ONcgZDOIReuMQtBkwRQafd8K+i/SQgJ2O7Hmcac/P2S/VFwJuWgxsPdFeqFK5nWavQlV4qD31ddeT7wRkCobQlBpiD3TnO1ZlrnUUAEXm6a20htlJiaj9i/3yM2zojg17KUbzDlGvfxjyLFOL+Tn6atEW94bpqEstH+HPJMGRxS2X1n4d2ym9CXnnLtlm7eE/kBmR5pQcD3EEnSo/9fL2RS5AAKp6Rpc1XRXj5S72rEDByVMRRa2V5HIecg2QfIlmfX5tTaE1PVvve/QQ2DUKNsvCU79Qk2loyes2TCf3QTfdt9ooSngY7w/LlJ+jZR+OFudLlZp0HLRH8l0VKBEg+hnGm0fDjP+ZEWl+368mm7Sli2fTV8RV8VUR8aB9vIa22J8BdJm2aQO7m0VHjxaqhnaPn9weZB+p1jqZv/1RyRLIakyEPnYktaKLPBC9h/Cc8Yq7hgZFtQIHPJS5N7d21ix9RBT16yQBAAVfSlyxSimEnPgW4i1/I9/VvBQ+eq9VvqPT2hexVhwTKjMp6Y7CqqB9ORD4VUcIacurr6zGB/D5nPWftxD8U3KgoXZbfAzsCSLyNT3rEKaCHDNjofCDgMD0UfNeXzo6p5ByQPB5pPmsmizKvp2gqI5885S75toc1ZMM9rYft3H5eEYdy1PfQFOccw+h4ajG23YEG/cwqCBueDu9tNcLr+lJeZERdadGO8qWDjPMFPcFmRB1+7pQSu8sn46ZExNk7bZYp7qaO4cJVTJGAVpM5+rqzMoo5NYuwOj2tKbAx3/Rw1fegB7+Q7MQtvVQWZLcTN4zL2qkcerWALwGc+sSEYqOtcSQjMuU6QvHdMLvMF/w73XHVrreetGJhkULe3zAnvHtkewNDmdpY+wXuoEB/1JE3gcM2fM7OIQJwj6fOwTgnfrsnBJueK8grff1MPVFJdXbrKazU2vAQZ6fUXyRKZjXYwo74c5Vj2OQIox0= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2025 17:21:07.0905 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ef9ff5fc-8fc2-43cc-ccab-08dd4ac07884 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF00017095.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4108 The intermediate results for HMAC is stored in the allocated keyslot by the hardware. Dynamic allocation of keyslot during an operation is hence not possible. As the number of keyslots are limited in the hardware, fallback to the HMAC software implementation if keyslots are not available Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-hash.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c index 89c1e1a0016b..c607a37d5e0e 100644 --- a/drivers/crypto/tegra/tegra-se-hash.c +++ b/drivers/crypto/tegra/tegra-se-hash.c @@ -631,13 +631,18 @@ static int tegra_hmac_setkey(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen) { struct tegra_sha_ctx *ctx = crypto_ahash_ctx(tfm); + int ret; if (aes_check_keylen(keylen)) return tegra_hmac_fallback_setkey(ctx, key, keylen); + ret = tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id); + if (ret) + return tegra_hmac_fallback_setkey(ctx, key, keylen); + ctx->fallback = false; - return tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id); + return 0; } static int tegra_sha_init(struct ahash_request *req)