From patchwork Mon Feb 24 09:16:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 13987637 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2060.outbound.protection.outlook.com [40.107.220.60]) (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 D93D7254B1D; Mon, 24 Feb 2025 09:16:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388616; cv=fail; b=B8xd2ujp4XSePbahW+I5zmoNrn/g/hwc2P58U7c6nqYK7vZuPNu1IPzYrFegrBfDWsMueWfDX5maG0QA5y34dnb3IhV2fOV9deWvbkYs++HWFqGa2I1OdA+qJaVLZ8XTPF0NcMMsBeH4T2e8Ybg455Z57aZNVLfz4hJkRfCpglc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388616; c=relaxed/simple; bh=EghS1WrlwWZJJ/9uUfDljH4LueQ00VL5uBOQTSPvioc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Idj9LKufiVu5V/0ekwHOXUeqEYXA3FHtFdsbNYTkUfzrtTGOcFhlV5yTkuA2JPxiUFolw7X4B9xfb4VuRaNn3QSaR5PItA73M9m8zW1Iuhm2WMGWCcNWSvG7meyQWKQKetgj1+I+7Jy79Qa9BZdFwwm1Xwal+6yXEMLc7wGFkYY= 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=cUF+lEyV; arc=fail smtp.client-ip=40.107.220.60 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="cUF+lEyV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gVK2gk+c4qVER6EJVeuAvtH08ZQXD0t864Wkj7OGiupZRD2EkxDpkTRKKuRTc+wFnI3t+/jDxcOuza8F0h/aVlJdGehvkkiyrhgcl1YD99g1IjhgLFjve6xGdFii/pFgrXrSEDj13EjgHhJOW1fW/LbKp8oDJsKz9Hyk/0xyd8LFEOwcaOKG/80eYntRRn/ojafTGSfXquQMsXZaY/EMQc8AD1TBtNpdqEjvi611tDjpizSYakV72NZ2NSZGDLgJzdCcZVUiNGnJXxkifmtIrCbz+cGi1ljafVfUXdMD6/NKISa9IDlgqb1K+2akGYV9kY+yvICAZC/gOdwCrBRljw== 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=E1QNPFNalffrpy7n/7n2LHku3aH7z5nJyZB1jgrOEqU=; b=GXTrlf5nT0wSU1iw0/iRDlENP/hthGEf+bwpSiYTx8zVDBFcnC137sKeUL2CWy9jdpLzQrRz8nxpjJWXdkstslbqza+WmHP2nmp+DMbsoqnQvFRPtaS09V9ISEyLba6WitNS1nDhrZD1hFz6Y2/OhYs07z5tZ4NhiaYc+czXcdZUKgip8Jk1wwajgcfCvVhKlzBdxrq7k1sHB6REvJ3XpUvu3PJtmb2SUVxI5tIO2EgCwmd2HUUYdVlUOUzi6F5lokA5S1Faxb7crSEMVhhaSq3saQQ4vw7yBk+vQs79+DolI2bMS9njv6V4gclIjfwcODwErXByrZV2sLnRfPj6Cg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=E1QNPFNalffrpy7n/7n2LHku3aH7z5nJyZB1jgrOEqU=; b=cUF+lEyVpnLJv4P9ui+Mj0nWj+D0C90/FtzXKjrkFEEa6BFSRWzgItVJ+NMDjfGBJ53/sO/8t7OUeKuUrF/jRY83Ck8hxkjMAsZDmGc6dIawNNjCrZKQj4JgzwjzwYi8qVdOC4Z9XqgcLgvjM13c788ysds0jc9YpdR2a0v04QmdD1NpCbsLMuRl1pjxjqWKo2ZfVLvgTDgPn75LrKMP57kXdt/yasJKZdB+wKMrb/LQmdzun+q10WFv77uxLcGsF90bavL8aIY6XOT7/MzGuFEWsvsiu306oOgM30TINSC9RX7CdHRYku2aviU8ROK2LxUZOKP1ZWbvQMyf/MLf6g== Received: from MN0P222CA0004.NAMP222.PROD.OUTLOOK.COM (2603:10b6:208:531::11) by SA1PR12MB6824.namprd12.prod.outlook.com (2603:10b6:806:25f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 24 Feb 2025 09:16:50 +0000 Received: from BL02EPF00029929.namprd02.prod.outlook.com (2603:10b6:208:531:cafe::21) by MN0P222CA0004.outlook.office365.com (2603:10b6:208:531::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Mon, 24 Feb 2025 09:16:50 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL02EPF00029929.mail.protection.outlook.com (10.167.249.54) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.16 via Frontend Transport; Mon, 24 Feb 2025 09:16:48 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:16:34 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:16:33 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:16:31 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 01/10] crypto: tegra: Use separate buffer for setkey Date: Mon, 24 Feb 2025 14:46:01 +0530 Message-ID: <20250224091610.49683-2-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: BL02EPF00029929:EE_|SA1PR12MB6824:EE_ X-MS-Office365-Filtering-Correlation-Id: 8727a398-417c-4dac-4586-08dd54b3f7cd 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: 0p+IzJo7+YMcaBtfkgKOpYnYSuojoWmDRStafZvjJXyjVURaZ6kSpTGH0axY3qzdh+DKkWeOOlkBZwp8us+CyHpPH+3bsNG6V31PE2DrPyVbmSoClU0X372ysQS/Vy4F/gVsQHxPtB+jg8yPpxJTwsbNhA+YwVpXpPq/XtTny9TyTvQxvnB8azTKjhkTNGkx4ahBIzQnm7NueLXW0jz6fmunrrDxUyhDcJy74pYa/XZzeCJ+siaKx2NmXoodHzc9hh2wl85SDNSuMu+0YEcndeyBNEMWhVl6rAKNhKZOMIkligcsPixbkR5nKIdJS2IgXSUPQTIKr+XL3v8nEA8VZOlbu0a+BQZIjOW35AMThiIiD0G1pnktcUnpePatOlASuMpEapjy8Tms4biaJLKYoLqSGRHIG/HfeW3LiYcR7A3ObWHwYWNOsojZ0wT7fX3NZcLPztKPzC6C4VUpYgOPFI+XFn9VACs8RZTwZ7WBtWKMqDFGAO4500ZaZj/mBT7aM1MZP/3u5aAG2NI/IS7/2KqEDf2b/yj3J3VaXw35wmk3mK8zzSxh3kVrgCBvF/3T5TFDtBxmNPvOuXVqX59JrqC3qWIg3vzetIvgqPEr2ZOIkZQvxvZ4u1Unm+vtlXTzF6so+1B7yeN2YH8zpUKG8HxBn8lTPq5jXxVtDiULY0VnQvSKhoFioUf7HFuoQKeZ0ME+1XKqYXGpKvnN6m8M1SFs6j2ws3VyqHc1XCOG29+O0iw7JIEEhnzwCtj5Wj49edKqeSjI9TpiK+cG+OBuaoja9PmpHRLe1sF4amy7NIBOiTCqgfIvmtmR/0iy08u8fSZI+dIEkouYa9UHPiPrvrXyntTKtn9chWame/FIHzHH49mej1KcNdoG1v7BN+2pif18jV5JNya260HtkRxkDrHk+7js04ITfDUNWQrqEk1akpJM3jHqvfaGL+FuAWgweJPWq7WVrRfBlY62uvaXNv/hVVRManc7NvVG65wHEZIYbfjhiG0rQAYZu4ydgtI2PGrjXsCJSouaH5ly8K8IwLvHTiL2xwEw7IOawaxoZ3bp6rWy+R7GA4wqkGTdSl36IFZy5DQTvSDxyJfd1/WEpQ4aTj8tiXGnJ9amFxHDbbNhLx+ACYW/K2DmU3JplbdzPZL7kWgCElxyB9uuiU/GO3mrAHdLIdVB+4zJn8Ru384E5pwa4DvG6ydJUeHCPSqsjoaQHMbusANavdqOp72Tmg7kapxuNAfzN8aYUq3kySArfnK5T3gBqRjw/Z3+KB2mrLvx71cIXotBQbDe9gVFxK303Hm/xKdbdEkP7n0jTTXjvc9A7qZwwa+3oIbKt7ExniJkQ+B7vqNhfN/86aR0U6Xa09oDqqdnNlI7pkCAcwUpMsVel/RXQwi/VtcE+fkrgj9XJnFtFxvHBQ7XWynmYC2O0hsnEgaZm5nFsnbVUvs7GD1p/bMgYoxPMZMB0xdjNaHlvhLCmvNlK/4nWsGbLEDFrlKdUEtY1/sN7IToMQg= X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:16:48.7907 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8727a398-417c-4dac-4586-08dd54b3f7cd X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF00029929.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6824 The buffer which sends the commands to host1x was shared for all tasks in the engine. This causes a problem with the setkey() function as it gets called asynchronous to the crypto engine queue. Modifying the same cmdbuf in setkey() will corrupt the ongoing host1x task and in turn break the encryption/decryption operation. Hence use a separate cmdbuf for setkey(). Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-aes.c | 16 ++++++++-------- drivers/crypto/tegra/tegra-se-hash.c | 13 +++++++------ drivers/crypto/tegra/tegra-se-key.c | 10 ++++++++-- drivers/crypto/tegra/tegra-se-main.c | 16 ++++++++++++---- drivers/crypto/tegra/tegra-se.h | 3 ++- 5 files changed, 37 insertions(+), 21 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index d734c9a56786..7da7e169a314 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -282,7 +282,7 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) /* Prepare the command and submit for execution */ cmdlen = tegra_aes_prep_cmd(ctx, rctx); - ret = tegra_se_host1x_submit(se, cmdlen); + ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); /* Copy the result */ tegra_aes_update_iv(req, ctx); @@ -719,7 +719,7 @@ static int tegra_gcm_do_gmac(struct tegra_aead_ctx *ctx, struct tegra_aead_reqct cmdlen = tegra_gmac_prep_cmd(ctx, rctx); - return tegra_se_host1x_submit(se, cmdlen); + return tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); } static int tegra_gcm_do_crypt(struct tegra_aead_ctx *ctx, struct tegra_aead_reqctx *rctx) @@ -736,7 +736,7 @@ static int tegra_gcm_do_crypt(struct tegra_aead_ctx *ctx, struct tegra_aead_reqc /* Prepare command and submit */ cmdlen = tegra_gcm_crypt_prep_cmd(ctx, rctx); - ret = tegra_se_host1x_submit(se, cmdlen); + ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); if (ret) return ret; @@ -759,7 +759,7 @@ static int tegra_gcm_do_final(struct tegra_aead_ctx *ctx, struct tegra_aead_reqc /* Prepare command and submit */ cmdlen = tegra_gcm_prep_final_cmd(se, cpuvaddr, rctx); - ret = tegra_se_host1x_submit(se, cmdlen); + ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); if (ret) return ret; @@ -891,7 +891,7 @@ static int tegra_ccm_do_cbcmac(struct tegra_aead_ctx *ctx, struct tegra_aead_req /* Prepare command and submit */ cmdlen = tegra_cbcmac_prep_cmd(ctx, rctx); - return tegra_se_host1x_submit(se, cmdlen); + return tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); } static int tegra_ccm_set_msg_len(u8 *block, unsigned int msglen, int csize) @@ -1098,7 +1098,7 @@ static int tegra_ccm_do_ctr(struct tegra_aead_ctx *ctx, struct tegra_aead_reqctx /* Prepare command and submit */ cmdlen = tegra_ctr_prep_cmd(ctx, rctx); - ret = tegra_se_host1x_submit(se, cmdlen); + ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); if (ret) return ret; @@ -1519,8 +1519,8 @@ static int tegra_cmac_do_update(struct ahash_request *req) tegra_cmac_paste_result(ctx->se, rctx); cmdlen = tegra_cmac_prep_cmd(ctx, rctx); + ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); - ret = tegra_se_host1x_submit(se, cmdlen); /* * If this is not the final update, copy the intermediate results * from the registers so that it can be used in the next 'update' @@ -1553,7 +1553,7 @@ static int tegra_cmac_do_final(struct ahash_request *req) /* Prepare command and submit */ cmdlen = tegra_cmac_prep_cmd(ctx, rctx); - ret = tegra_se_host1x_submit(se, cmdlen); + ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); if (ret) goto out; diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c index 0b5cdd5676b1..c7b2a062a03c 100644 --- a/drivers/crypto/tegra/tegra-se-hash.c +++ b/drivers/crypto/tegra/tegra-se-hash.c @@ -300,8 +300,9 @@ static int tegra_sha_do_update(struct ahash_request *req) { struct tegra_sha_ctx *ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req)); struct tegra_sha_reqctx *rctx = ahash_request_ctx(req); + struct tegra_se *se = ctx->se; unsigned int nblks, nresidue, size, ret; - u32 *cpuvaddr = ctx->se->cmdbuf->addr; + u32 *cpuvaddr = se->cmdbuf->addr; nresidue = (req->nbytes + rctx->residue.size) % rctx->blk_size; nblks = (req->nbytes + rctx->residue.size) / rctx->blk_size; @@ -353,11 +354,11 @@ static int tegra_sha_do_update(struct ahash_request *req) * This is to support the import/export functionality. */ if (!(rctx->task & SHA_FIRST)) - tegra_sha_paste_hash_result(ctx->se, rctx); + tegra_sha_paste_hash_result(se, rctx); - size = tegra_sha_prep_cmd(ctx->se, cpuvaddr, rctx); + size = tegra_sha_prep_cmd(se, cpuvaddr, rctx); - ret = tegra_se_host1x_submit(ctx->se, size); + ret = tegra_se_host1x_submit(se, se->cmdbuf, size); /* * If this is not the final update, copy the intermediate results @@ -365,7 +366,7 @@ static int tegra_sha_do_update(struct ahash_request *req) * call. This is to support the import/export functionality. */ if (!(rctx->task & SHA_FINAL)) - tegra_sha_copy_hash_result(ctx->se, rctx); + tegra_sha_copy_hash_result(se, rctx); return ret; } @@ -388,7 +389,7 @@ static int tegra_sha_do_final(struct ahash_request *req) size = tegra_sha_prep_cmd(se, cpuvaddr, rctx); - ret = tegra_se_host1x_submit(se, size); + ret = tegra_se_host1x_submit(se, se->cmdbuf, size); if (ret) goto out; diff --git a/drivers/crypto/tegra/tegra-se-key.c b/drivers/crypto/tegra/tegra-se-key.c index ac14678dbd30..276b261fb6df 100644 --- a/drivers/crypto/tegra/tegra-se-key.c +++ b/drivers/crypto/tegra/tegra-se-key.c @@ -115,11 +115,17 @@ static int tegra_key_insert(struct tegra_se *se, const u8 *key, u32 keylen, u16 slot, u32 alg) { const u32 *keyval = (u32 *)key; - u32 *addr = se->cmdbuf->addr, size; + u32 *addr = se->keybuf->addr, size; + int ret; + + mutex_lock(&kslt_lock); size = tegra_key_prep_ins_cmd(se, addr, keyval, keylen, slot, alg); + ret = tegra_se_host1x_submit(se, se->keybuf, size); - return tegra_se_host1x_submit(se, size); + mutex_unlock(&kslt_lock); + + return ret; } void tegra_key_invalidate(struct tegra_se *se, u32 keyid, u32 alg) diff --git a/drivers/crypto/tegra/tegra-se-main.c b/drivers/crypto/tegra/tegra-se-main.c index 918c0b10614d..1c94f1de0546 100644 --- a/drivers/crypto/tegra/tegra-se-main.c +++ b/drivers/crypto/tegra/tegra-se-main.c @@ -141,7 +141,7 @@ static struct tegra_se_cmdbuf *tegra_se_host1x_bo_alloc(struct tegra_se *se, ssi return cmdbuf; } -int tegra_se_host1x_submit(struct tegra_se *se, u32 size) +int tegra_se_host1x_submit(struct tegra_se *se, struct tegra_se_cmdbuf *cmdbuf, u32 size) { struct host1x_job *job; int ret; @@ -160,9 +160,9 @@ int tegra_se_host1x_submit(struct tegra_se *se, u32 size) job->engine_fallback_streamid = se->stream_id; job->engine_streamid_offset = SE_STREAM_ID; - se->cmdbuf->words = size; + cmdbuf->words = size; - host1x_job_add_gather(job, &se->cmdbuf->bo, size, 0); + host1x_job_add_gather(job, &cmdbuf->bo, size, 0); ret = host1x_job_pin(job, se->dev); if (ret) { @@ -220,14 +220,22 @@ static int tegra_se_client_init(struct host1x_client *client) goto syncpt_put; } + se->keybuf = tegra_se_host1x_bo_alloc(se, SZ_4K); + if (!se->keybuf) { + ret = -ENOMEM; + goto cmdbuf_put; + } + ret = se->hw->init_alg(se); if (ret) { dev_err(se->dev, "failed to register algorithms\n"); - goto cmdbuf_put; + goto keybuf_put; } return 0; +keybuf_put: + tegra_se_cmdbuf_put(&se->keybuf->bo); cmdbuf_put: tegra_se_cmdbuf_put(&se->cmdbuf->bo); syncpt_put: diff --git a/drivers/crypto/tegra/tegra-se.h b/drivers/crypto/tegra/tegra-se.h index b9dd7ceb8783..b54aefe717a1 100644 --- a/drivers/crypto/tegra/tegra-se.h +++ b/drivers/crypto/tegra/tegra-se.h @@ -420,6 +420,7 @@ struct tegra_se { struct host1x_client client; struct host1x_channel *channel; struct tegra_se_cmdbuf *cmdbuf; + struct tegra_se_cmdbuf *keybuf; struct crypto_engine *engine; struct host1x_syncpt *syncpt; struct device *dev; @@ -502,7 +503,7 @@ void tegra_deinit_hash(struct tegra_se *se); int tegra_key_submit(struct tegra_se *se, const u8 *key, u32 keylen, u32 alg, u32 *keyid); void tegra_key_invalidate(struct tegra_se *se, u32 keyid, u32 alg); -int tegra_se_host1x_submit(struct tegra_se *se, u32 size); +int tegra_se_host1x_submit(struct tegra_se *se, struct tegra_se_cmdbuf *cmdbuf, u32 size); /* HOST1x OPCODES */ static inline u32 host1x_opcode_setpayload(unsigned int payload) From patchwork Mon Feb 24 09:16:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 13987638 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2080.outbound.protection.outlook.com [40.107.244.80]) (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 D50AD255E36; Mon, 24 Feb 2025 09:17:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.80 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388630; cv=fail; b=rfi93lacj91bz5m0JPdWAzpPjw7IKZOIylzNAYQQYp9lCH4aiFYFXOvmsHGxzlV9slyxNn0kQa5yNe4ifI+oQhvQME3cIiJkYIB7t+jkps4Yky1L2qOI1h/SzjaHmBcBEnSlC/F8uQycWM85XxpkeVDogIAmN0hLhMubqZSztbs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388630; c=relaxed/simple; bh=C13nHlWGDhRnknGErb+juqd1bNzkxuWT3lPQrCXy9Dw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=N33yncQ9QwA9PSChis+KE/Go8vI1DyA3bzCiSBAhW6FRMeeQ8NbNiA+oe7A4yoZoyD0b99geafqfHIuyaOsmEAPFcqQx/CFZG/PMMEix+xmgHvzFXZin1iqbuImGyJAkGrUdPCz0iWqPdMoOHHqtLU8NoHD+WGcTm6m9KVO0ELQ= 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=Yx0bNR3b; arc=fail smtp.client-ip=40.107.244.80 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="Yx0bNR3b" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=q9/AwcNnOuwDNFrlFUGuuRtXmpfU2bgypItVbKUGhm3d8QwdQS11pwhG+zIAU9Zp3Vvyhv4yVpIKrsYsddt0GUriAsoInet51w/NUZGW9JMZAhYbvzq+XYkkNon5weLXovQN22kSlTb1E4uUNhK+Uvkurkwy0Oot+APb+ngYUJX4MpqgDoWmT2aFmLRG47y2408OmZq0lhOXZ3EswaoZXmc9VomP/YxBMVUSe5iTSUU6V+3dP61EZuV35YWgxhFsevGpSxp2xgeSkDo+vYYjiVRMj1uSJGNDzwYsu5xzj3IEb/IJS/vk31qh8y9OLoq/nV/KjvT2Xh3CfHMH2/mbkQ== 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=KV+YKS1kk0cT/S9dWgK/5OQDLQmvyf1Qux7o1FREkn9yTkxjPmar/utd/D7V//gePoUKIdPxgqbE+ZyK1G9IOOd6DwZZ+1rrCbqAsoqEKxM6ZxIvKtInL2PdOkd7q8ttk9ZHYEuScjsiJrlOpLID86c2wW9gGVBElUd3I2XrybMTtO7V5LzEUTCs4xQl24J0HTrJ17G1qw+LGFzhCRFKgEdbgFSNMHn4EUVLRJiVawc+QjvYWpdxSzhuGXECOTe755jq9SjKU0rI703PRmk3rMaEl9B2+AvW1WO/8d1w6re2jT7za8qlo2ksfU9DorfaaIF3lqtPTfSiZue4BZ5XJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=Yx0bNR3bfMxlYQ/A593uGx3OhSf1pg2AxTgt5XoIp2dzJPrkFGRbVaDHa7ZX8Qn+b2OITSXCVjF/E7BU8LNjKULwUC7CS9gHOOeO3Bav32+oAkwVenEbTiZ7n2hNWe54uwdWg+HoR4GjPrNzmtTp2VIkFJhUuh7MqEHUpyQZhHqdS2GzPUTUi4I2u9Yz3e0ibHfCUpYqIN6LwsKZm0KyElIbstNL9DfeHit8XNXbMkB6smdVIiFEUGSvq+sTsP269LSpSQa+vpgj/ForTVZikeBqGlUlA0lkoCTuvD8JPgR7g9wRwGHCcwwGV5B4HMTJmDg/2MImDHvja/dO7Bbyrg== Received: from BN9PR03CA0211.namprd03.prod.outlook.com (2603:10b6:408:f8::6) by CH2PR12MB4055.namprd12.prod.outlook.com (2603:10b6:610:78::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:17:04 +0000 Received: from BL02EPF0002992A.namprd02.prod.outlook.com (2603:10b6:408:f8:cafe::7c) by BN9PR03CA0211.outlook.office365.com (2603:10b6:408:f8::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.21 via Frontend Transport; Mon, 24 Feb 2025 09:17:04 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL02EPF0002992A.mail.protection.outlook.com (10.167.249.55) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Mon, 24 Feb 2025 09:17:02 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:16:50 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:16:50 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:16:47 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 02/10] crypto: tegra: Do not use fixed size buffers Date: Mon, 24 Feb 2025 14:46:02 +0530 Message-ID: <20250224091610.49683-3-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: BL02EPF0002992A:EE_|CH2PR12MB4055:EE_ X-MS-Office365-Filtering-Correlation-Id: 90e2668c-464a-47e7-fd66-08dd54b40042 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: h5t2mwegcomiX0V4yiUV1Rzahg/xT3Ms1gZuY5vBbRFnyZGoAm0BuVhRMg2STmRe/P4yt0ZialKmhhuLk5Aaoxgi4cgivw1paVI6L0+iRAFkfX/FaAxzg1MyYvuCdRtTmVs05DX6nKA3UZqaKONBucmG0Cg9bGM0aUrtP1krE2VQI6ITda0boWno3QIjp8Cr6FMxS3iifjuf0oxArVs2BzxDDizM/78LBFbkAhm0mL6TMdUqXhVq9POvcqYhAB/BOY8ujYTpS/8tziPK6i6jiiHWxbQdTxybm4km7WeH8P4Lce9FbEnFtvEbVa8s2LG+vXo95Gv26yTlO25OAaL6laoejSmXZWllPhRzsGS39yywuP1yfevUncRNB+3q8XMzJidBcl52QZAKD5l5C8LKI5CSHK9CN8sYKK6uH3I8qcNtERbze8Yd5UoGlikAr9AT1pV44EqKRMeo0oRmO7+RWo9QyAdE0kyWWOz4rH5CVtQOgCH9O3okVzkjYwP7WUXD+xwdTfutoFpV37HfKcaFSRrzat5VnTz0NPOaLOyPjSsOMHZZsL2f0OvBREfN3+td5H4iQWVXMwvn/tNvYuse4pprXEqhvhwlZUmODXzC9n0JQmDLgRFRDlJc/A2GanopOE97AXqmOjatnXa9mfe8YDRQMsQAWAIi9Qp6Cbi8ojWX3/ZU2nr1p45Xl7ww8OFnmDq4id00OPJAzPNLuxvrnWgqegJ8+BltUI3fGQ5YGYNnbGMxr/GyIjAo56Xlm2wdc0Pqt1GXHiKRu+h6tuN6ls74cWIc+7/Gv+pM131uANgwqCmGavTYcPeyQWhhqS9fYxyjy2Kjy3audRPC14BBLo9ohzV/sTXSXsh6q5P7Xat+5atieZKYofavG3DbT+716AVdGOAg6qOyG1zneRiOnb+h+JNaJqhGO5fNb1Q77GlsSIgpYJN9Q3djiAoKnKVwaAw4zfJcFdTSIoOSW5VZFy/dbNa7yNy92IOaIiHBuEFwFcYswCRwQlPqmbSFd4nb34JAXl0VtZpZ5Jmw8ggE88Z6ebBjExZ21+WEdz5YWO0o76hHxj28eOu/pEUnE+MTEY/ifrGYDKJMba77FBmrKwgeaUQ75YOoFAId20E5VfGwnZg3mP5ney7RaASMUoja08A0PX3Ym/yfVGJXzybDvuYSYa1bwvVE3jpgy7RTqY+rva9AUbAoIEC4PXowaNoF1TyAAmld7GESgf6xz42nY2vJPafd9LC8J30PbDJM5VaB7SzGqllp8j52oE9V2CAiZZcmnaFmVVjdPA+DM7KLUyGD2xWIJ6flgyF3X5T5M7FlIIp1cwyCGkm95Ll72bgPgt6iJ0lsXoTx8OT6ZVOWgBXAMTw0F7835P3DyuMHCIpda9QuDLyquXtO+t1Z188ov6uKvBVnmnRXX97J1i3WrHMY8PEQQcYBdgbmqyzMXqUj4ZLYPIY/zqXAztdYLydeW78V3JCYFSWtHELBA5NXd+I5WCiqqW5pMeMEnXzL3t4= X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:17:02.9840 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 90e2668c-464a-47e7-fd66-08dd54b40042 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0002992A.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4055 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 Mon Feb 24 09:16:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 13987640 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2051.outbound.protection.outlook.com [40.107.102.51]) (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 923C7244EA1; Mon, 24 Feb 2025 09:17:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.102.51 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388664; cv=fail; b=SLUgDDdIYm6kZkYWoih/U4SgTP58hV/IL+jBaEhE+L44vKxrzdcI2Eg0A/sD2bZGDq/LUQosVEDxShR0q0XvctiaC2Fa8lGIeqeYn0gGJSA8jDlUmC8QWKioDjpsv8xlei+wNRHZumVP10n/3JlsNV6ZIohS3ben6PS+imW7lAc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388664; c=relaxed/simple; bh=QVIU8ZQVwEJ2SYofVJT7+zK6AqJFqDg+Ghiesgd3rR4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IpQB11C+exQDFkKu2Z6Wq5orYz1M3wRk0tsdvsujSpiwoJ/teEzYw6LxGfCqEPcsJQWJh5a42ukW9NWmFDxcYzwZtzqiPPKZmqlKBHrY9/K04O9QmW3yZgDfPVVjcnXTIKngXSQlf3XurwxJNyBbaNXRHmWGGw6F6Ecm0lJnhAg= 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=V+52gSzq; arc=fail smtp.client-ip=40.107.102.51 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="V+52gSzq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A8ob23L1v0b95jwWN6sJOqrPPZBzSILYlEsgxZ9Pc6aOrrQb9HHa7o8hhl6/qQZ3wmqC4Ub2bNhDEqiqmS7nBKqmUSF4jBZQZsICnlTzsjK5u/pa9GmgcuyGlEgUiywDoywwv2ToGLOuuUK44Q/DgE3yj91KRY2zK9NCNIagIXz4gDji93/VCgkmz3y5B6Tw1aFoN76/t8NazfBE6fPwL0RV+ESsdpT62RaKfMq6NH9qLw3I1P1XybkQzW63JCFVd5Z4cSWVs126AAAv3AXNAx2wuN9whSsGRJvDu3BSpdDRbJ3Tww9mghtkDTSiShnkSTfIN9zNouX5Frssn4hZPg== 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=cfPPImK93HA+wWqmE1Ne8rO+ehd7fzo7dbpyKwQmxO8=; b=FBVP2C/biKEzsa99/ULPbS5KeYiZqsUva1dNJO9G2EFFrSbk4JtPdD9AbEsgKjNhxqaj50CvRKVogLCPhTdDy2zCG5xME8KuMmwbdTBYsgwmqD8SbSTmcJjkZW84xDmRBXxGRHeNI/QMc+F1DnAx2zlUxx3DrN7/sCzF1MsPq6rw25EXdDG8iplZwf0N0StvS3FgzeAof5g8/VHY/Rh6tb82IFROsM18vk8DLqeJaMBAyE7IQn/GJb0wJBiCitbBNKDqMUGkKQWyLX5moxgJhjZFjiisyIriLDpqEaYojYrjwxheyBcVbXMuQ7CAamHdSThRtx4+sdaFzU4ODuL1Mw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=cfPPImK93HA+wWqmE1Ne8rO+ehd7fzo7dbpyKwQmxO8=; b=V+52gSzqUpu80R6FgclePsrG2IxrJRQHcVh3DI/ocrdKJaU5HL/wvE1QGSXsrvCEiuaXaEX5o5MwUsKuP8Cd61reEaV3ws6OT/udDe3eUQzaB4gEcOJqzGKoiLAi7rOIT6ws22VWuEpNs58ogStYiP1orZKoxUomKGVLr5UWw70CIJS74sZ3t3y6LwmOq4Irm+2X2oOscKK7fpL2xtGYlXzHQJpbtrvn3WqNwVTlBlNoi9BzJxWg0Y64L/+ChJOqdBN0jAGmVPfUpslomQkaeeCWE0g3rS1eYQkFuLgTu9jkGCvQna3pVAOPqkbvNqAksObtBtwOQ9+MzI3zA0xCeQ== Received: from BLAPR03CA0043.namprd03.prod.outlook.com (2603:10b6:208:32d::18) by BL3PR12MB6644.namprd12.prod.outlook.com (2603:10b6:208:3b1::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.19; Mon, 24 Feb 2025 09:17:31 +0000 Received: from BL6PEPF0001AB58.namprd02.prod.outlook.com (2603:10b6:208:32d:cafe::3d) by BLAPR03CA0043.outlook.office365.com (2603:10b6:208:32d::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Mon, 24 Feb 2025 09:17:31 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL6PEPF0001AB58.mail.protection.outlook.com (10.167.241.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.16 via Frontend Transport; Mon, 24 Feb 2025 09:17:30 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:17:11 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:17:11 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:17:08 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 03/10] crypto: tegra: finalize crypto req on error Date: Mon, 24 Feb 2025 14:46:03 +0530 Message-ID: <20250224091610.49683-4-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: BL6PEPF0001AB58:EE_|BL3PR12MB6644:EE_ X-MS-Office365-Filtering-Correlation-Id: d544f421-cfab-4c75-2951-08dd54b410a7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: WFbJPgkWXCM0nhP3oP1JeZ7D//Rt/FXd6mjRwhqClyRCmMvyBeqenHVO2FqX8hePt5YU0hcFpypi4VyXd39j5QUxVh3gkE3kYnvHNCyvdSwXjd0YEUTym++ZBFOfykwHooFfwmc65GaL+IbvD/IoR5UkhITfn0apb7aLUo27NVaX/u7202laQ64bGg1x+5Gnj4tukIX1V2IvEJJNH5P5t/ZVBU+ufOmsIik6XX0wXFtwI5iZN8nf2YkjVk3J6fsnb5RkpRIII1sEqGAVYe35UHo+CSufSxqkreHnwro+TZjdRLWKqWc2LiDV1i6XcsY5aawxBjMTLxp2XiBLEvo+e1qFZ3XQDeUq8/2pwFmYZYhVCfNtlc2dPt5gItb4V/MtJKFkSpNMi6YojSngHBsGKuT9a8AiQLNkqKAN1k5sNoyKJEFgt5hK+6Ce5DzkDEaALResx7pe64jMrXPUuG01KxAEaRzDbI2D6kOYfw3yrsIh+cVILxJLtG42PFjoYd6TlBtwouyGezmriWr6d3fYeLaT+SVH99hiIW9x7E9ngM4OYMh1juB5xctaTI3AuGwfFwN0V632oR1M0Euocz9nhLciT9mLpEYJNkbj7jDvAbumfRtw8MtjlqeEZcMDujKsRi8EFqL++h0nZ+GVAXaF4vQDenudBf50UVqtSaoS5QyMo1sjhmQIC5ebBuCB7lcvUjv9zM8bQ1ja0IhRDOo0/TutWrtMzde7Ly9sl9pWnnwMF2S3yZKx1Ip40Gts1pzRVV20xh02GzjzUL/lCzvvfGcd9T2PcEEHwDrvnSJOf15Qvn5jdsH2UlgI/v+wGZfrI+wXFftjgHNVnj7uqg5Ag6Y6dYWxcsievFbnjbTXuSmF/Hyh6+w3Ddgh5yhKP9NuWjylfG3wJhwIduLwV+V17A9s5t/QkZgX47798mHhaI615tHzOoDyeEaPXf9qC8fSwMJ5DVQWdEw7qdDKrx/0hdWF1cw5xdJkUl5ukrDgAlhFtI3vhEFMEUqO0WKg/2tS2zxnqTFXyuL3Y6H0oW1AFRxtAO/4z0WH8M/7z9r/bqr0+NYYS/BBkrYfTNgidcuO3pSYdiP8Ruo9uLvG+KLVYgqPhxAd5ziimDqzF/DHN22fJChx2IAR5H5XJmVnW38wNQppihGxnb/3ayUzq22QojFCmE44YPY8LtwvIqY7y8T8WcFBmSIhedeaz6rpdsGmhtjgw236iMOxY+2xd6cEH7M3+smhj3KSQ4b3usBexTRrx0gPgfXZXuANnR3bUSOwkUejSyAZ2UDtmMSwhpb5bJR6GTpF3HMEPJmVO7tgf9+OsEvy5KM1W/ti/Ww5Nrfmf3FmioWq2n316Vh1171KYVMqk17lTuaPDZmALzbRBK0t/4W2BCkKE4jMuw5PO0b8i8MY22v9ylFsHmXdzqq7yVDIL1NlRStHTnAyPPwtHAxT/Rnu8nIBi1FnYgIMeLmHQu50PdNuaPA12bI79W5DlZM4gPJPFUhkUkydFPoTlw4= X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(82310400026)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:17:30.4684 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d544f421-cfab-4c75-2951-08dd54b410a7 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB58.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR12MB6644 Call the crypto finalize function before exiting *do_one_req() functions. This allows the driver to take up further requests even if the previous one fails. Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-aes.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index c2b8891a905d..c7bb6f951a84 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -275,8 +275,10 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) 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; + if (!rctx->datbuf.buf) { + ret = -ENOMEM; + goto out_finalize; + } scatterwalk_map_and_copy(rctx->datbuf.buf, req->src, 0, req->cryptlen, 0); @@ -292,6 +294,7 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) dma_free_coherent(ctx->se->dev, rctx->datbuf.size, rctx->datbuf.buf, rctx->datbuf.addr); +out_finalize: crypto_finalize_skcipher_request(se->engine, req, ret); return 0; @@ -1152,21 +1155,21 @@ static int tegra_ccm_do_one_req(struct crypto_engine *engine, void *areq) ret = tegra_ccm_crypt_init(req, se, rctx); if (ret) - return ret; + goto out_finalize; /* Allocate buffers required */ 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; + goto out_finalize; 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; + goto out_free_inbuf; } if (rctx->encrypt) { @@ -1195,10 +1198,11 @@ static int tegra_ccm_do_one_req(struct crypto_engine *engine, void *areq) dma_free_coherent(ctx->se->dev, rctx->inbuf.size, rctx->outbuf.buf, rctx->outbuf.addr); -outbuf_err: +out_free_inbuf: dma_free_coherent(ctx->se->dev, rctx->outbuf.size, rctx->inbuf.buf, rctx->inbuf.addr); +out_finalize: crypto_finalize_aead_request(ctx->se->engine, req, ret); return 0; @@ -1229,15 +1233,17 @@ static int tegra_gcm_do_one_req(struct crypto_engine *engine, void *areq) 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; + if (!rctx->inbuf.buf) { + ret = -ENOMEM; + goto out_finalize; + } 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; + goto out_free_inbuf; } /* If there is associated data perform GMAC operation */ @@ -1266,11 +1272,11 @@ static int tegra_gcm_do_one_req(struct crypto_engine *engine, void *areq) dma_free_coherent(ctx->se->dev, rctx->outbuf.size, rctx->outbuf.buf, rctx->outbuf.addr); -outbuf_err: +out_free_inbuf: dma_free_coherent(ctx->se->dev, rctx->inbuf.size, rctx->inbuf.buf, rctx->inbuf.addr); - /* Finalize the request if there are no errors */ +out_finalize: crypto_finalize_aead_request(ctx->se->engine, req, ret); return 0; From patchwork Mon Feb 24 09:16:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 13987639 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2071.outbound.protection.outlook.com [40.107.94.71]) (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 767E123E229; Mon, 24 Feb 2025 09:17:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388662; cv=fail; b=lrQwTMh7p3KyAsYuS3N3T2yetwygolX3oPS6ieSczLDy1xGxn+cr7J/Q7snzYjEVFlT627jgon6XYf0QzZhOQaIpEoECQakVGHfFyK287h0IRAyf13bpvEqcloJaZJa41uHlHS9FgkLrdrsb/1M15OKY3nUirUJL99aUWK1FGJ0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388662; c=relaxed/simple; bh=ky6avQTNlk5H2RTwq4XgHkXbOLa0/YatqxjpApepmNA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=i7O2k/CqflGGzfl3SxMEHjBnMgHXJaRvrkAfm810T/0iKSWbH4/zhf9wPrOUXzVuVNwMaLs9IWuVzG9GrT8/fmV+3xwyLFjWwkbwMFzMJDMAha+Um11RowCtysng1gSYOST7GFGD16vqjSLibT1sQE9uixre+7ImwhAEm8wapCM= 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=QoZi6fs7; arc=fail smtp.client-ip=40.107.94.71 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="QoZi6fs7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ESb8l5GOGt7FDHHG56Zuif/x3cBhtt+hcy62br1ok7SnpOSxrvPN5gmQRJAQ/9HrSTD3GiB023BdkE6esCSO+8MJEuyxLX1PADFtsxF1Kd5nFybKPDnOpg0ntfsna56UEoBETNP9NPa5z0XT0BqrGoWsQV6kxWrl6MSEacISnjJ5eTo83N936BQtxoQslUKj5kW+FTTha+g4XXddZoPgyUNnjylZ93LlpUB1AMF9XDblk6VNsegjCG4NNIDSTz3l7ysk7GUKrp6QwDMIIHbEr3RMHOclAncPjfA7yyx3XdoJ/gvQ4ZlejwxHlAJOKbYsvvDsqeZv8EZb/6sQGIQwww== 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=QG8Bkxa9mCwaXShlzCYrOeDz5N4On6dKBJ1D5TrAWGu23rWViPmR4JLnfSG9sCkCswpWGavrUDGJ4i8PQ+ZBaDAliSq9U4i3b7S3hRtg1N7tBv13+XRb7RN1sQeio/PQ90oPB9SVrLnVFMVGD/20iRWg+spfKYuMKAwVelkmvmroVhGWYqYzLPPmzuglyMGrU42cEv3lOCq6VJkXZm5GvuPJmrA1KuW9hZmAx3sYLsBZEtcoksq1KfJ+9CFiN8wR74o2PpiQwhJWZdkKiPzMzZN3904/H1LqHxuyHzzwwK42nUlpHLQmSVrGaCtXtYx2hpYdA8PoDFf0x4nZFDFBrA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) 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=QoZi6fs7b7k2GuTq5TxXSBPqAEoq3aREmFqRclR7FXf4FeUuZx2N1Z0IQuRVT2K8/LyoyDC46oEG8ma7/7saskysS6EC2lPBHjVZXsKv6K/4DkDcJHpltj0ddaLrOFGhsbAKH5zZPqvk7J/Y/mz5SkMTWJ17k3GiB3g3ACQsGC610alLSFeYNb8+3meAamHp+nbjIHPe00Ydy6cGSwgDa+GxVpnIyu3XyuByc6l3E2IwBCsJve2HEiS2N4Z9wVhghi47NDb+GfKAD/MsRv/wDS9YFtD/6AhlQtWXLrQTQyhyhZmrk7oGBkHR+5WHEWlChd6t+kaXj0TraCDgMNig/g== Received: from CH3P221CA0025.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:1e7::20) by SJ1PR12MB6052.namprd12.prod.outlook.com (2603:10b6:a03:489::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.19; Mon, 24 Feb 2025 09:17:33 +0000 Received: from CH3PEPF00000011.namprd21.prod.outlook.com (2603:10b6:610:1e7:cafe::2e) by CH3P221CA0025.outlook.office365.com (2603:10b6:610:1e7::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.21 via Frontend Transport; Mon, 24 Feb 2025 09:17:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by CH3PEPF00000011.mail.protection.outlook.com (10.167.244.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.0 via Frontend Transport; Mon, 24 Feb 2025 09:17:32 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:17:24 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:17:23 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:17:20 -0800 From: Akhil R To: , , , , , , CC: Akhil R , kernel test robot , "Dan Carpenter" Subject: [PATCH v3 04/10] crypto: tegra: check return value for hash do_one_req Date: Mon, 24 Feb 2025 14:46:04 +0530 Message-ID: <20250224091610.49683-5-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: CH3PEPF00000011:EE_|SJ1PR12MB6052:EE_ X-MS-Office365-Filtering-Correlation-Id: 809d38b4-2f3c-4a9b-da70-08dd54b41187 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|376014|1800799024; X-Microsoft-Antispam-Message-Info: GfKkj+JqDh7HBABit/8Tt0FMyHR6/IxYbin6/AynKQhQ/18L0P0yR4QJQSCNP8+BFvnYTHoLomBeFRAtFOLovJM0Wg35qB79HHhBv2JL0Lt3F2uT2sgh1J0XtTofeJ3alIf4+2UBWTxWZLjbDDmPQAIfRBQDc3qhOh5FF1eGeRUfMSR2ygbxkByXQOuzfKxhnS3yb7kOeFN/3xi420hdM4pDxyyvBtoU62VUmsG6OPUOpdk1AYXxjwi3sIQedRx5CysaI2OMlmqwXU0YcqZM6/yNC9E4EF5pUd8WhJmRux4tVHppG2u6k70g66BlM7ZcR+YdDMDTxOaQyO/XiC55NUKDtgPPGaa0FoaKaiPlHh5xqbre3mI0ymjInJriELAHn69TlCAER1TrDdMs3nly5kz7PA4RgIw8eFI3/092j0QTL+6/Mu1IKdM115crt5WkmTIvQ9p9HABDCZMon/xhAxgD5vDXWfFXXlzAglLd/KSTDb1CFpQXFhaqVC8LWgwcuqyyMVzRi1c8RUMjrJyOVrGXen9GmUtBI4Uu9x0i04uOF16mOnvA+tMGkre9g/LPFaE34/1HGcMUjEyhAhla854pIK2ODtdESujDcMmCjL4WngbLKEP6D0jBks5cozV/G4vQVa9xQVOX6+GRPGboZ2Np+G5OArsWnTeQd5oXJyJXM9hDNwmXTXltXCxNgGE+u1rLYsBMx/6kNxg8eA5qhMUE/VKkS7wD9fpNhoR+uHnYJvoc1f5dFo+rveSIhWghCG3v0/f276ap4Iw1vVN3rVtJyvi1Z5g9jKE8e8xamd8xKPi+Ti3w6wm0mf4W5qTeeOoFK3MVVKDfYbRljUuGLnifJff67ibPhon5T+FnnoagjAI7xd1LivvB/g3pnFYOD2oWXzqiFE56ctodHBf4OEMW6g5LIASanqT9Fw0KT9kOYpkj1CRsTerFMkIduUZpZU8w8mW3O8dUrKDni3JS7vi9Ppv/YiejRjgd4JGGDg+PdXeZYs3ghzqSvLdow2wgr1mM4J9MOMInjU9i780BW9vR7C4gFYnehrbB2eZWLEqUteucbUHkoTuSnKpBgUC4aBWRe/29iz/efO41DdUzrwm2bLO6AWUTjWWuK7DWTSQ3/OBHg9x7VnuzYvRF++znBF7F9f6hJWYotQM+VGJtIa3I/x2tGlX7vHhrtzAT7iKLyWaq++EP7lo0V9hPQqE1mYgl4ZUM6+t3gDjmGf4vEPd5146Hki9+5dsrNJeSvK7BeOq4arCw9SfOaJ1LnJs8uQZHQc3YePnhrIl1Jrxtar7fiIlqJ7/14WAP5Vb+RNFNGguRkW3KFE3gUfunkYc5abee7/0M+RhBMoVDz8wjwckf7ep92DQgiDCY7EWRuVYOVSmlJlvLCSXGq7ZRAZRY27D6yYLmVmG15bTH/flb3EQh2hzaPQMd/mQUSVLTb2Y4Kscm6+GlGo9fDL5+OVJA9U2zShRwbmPkcAjFIKtPBZJjL7vq9nllevaVoGwy7gE= X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(376014)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:17:32.0034 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 809d38b4-2f3c-4a9b-da70-08dd54b41187 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000011.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6052 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 Mon Feb 24 09:16: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: 13987641 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2082.outbound.protection.outlook.com [40.107.95.82]) (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 E57882475E8; Mon, 24 Feb 2025 09:18:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.95.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388686; cv=fail; b=e/8NG3zmKxK7m937+e2IkQem86b9RbNN2Z6kxA7YFhd2Ab5ODy45j5ZtsTyMq9HJBAH63X/M5uzrGZa4U+KH31ZgJwscUBt72pFlUl+HRKQCKjURZ8bCBW4rxMBuu4iOUOk5ZGcPIgH+s+BnyZfSr27x35bPHSu1RvO6EiPf9mw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388686; c=relaxed/simple; bh=gPiYvw9rT4f0xdKm2x+nAQkXKy0VWWyFkRM9ivSjRJ4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rwmmbIM98Iu8CFYBldN1M5qBbLTlXJPM6SRIxmWgW/JT27RnjtTTi0kSf/ejqpzJ0Rp15NioIBOd5pdr5OLqLnB0+/EvGSM2gdoGPRgGO68DLAQUj7J3OF1TY5J/w0KrWc/0MC5I42KlX82x+ws+waed3a0gw8DjQlG8PqKbrAU= 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=ZIhoSjUg; arc=fail smtp.client-ip=40.107.95.82 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="ZIhoSjUg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pKBfxZLnNuQFo8EQlfSJ1ZXJ8IvQLhDXLd+PZrewabdh7LroRv0UInbtQoqKmT/e1pPbXl5eYNnEWmo7nP8pRtPZO0A0Quzrha7Td/oDMTicuC5BX8SqAZ3F1uuJ6ub4YpReSGDYbJfUVcuEviQn/m31+ML3esx779mcuOsVOdzg/hh73GSdqePw7I9glkYdH0eSVJ6eDZ9yJZmjk+31Z/1KZcvCyIfUbfIoCkZvDid/tYdAOnssO9MgVBu8WNUw/X+vxWmUI5hxsSkzZEN/43eMEiGupSA7XJ/eOxdoUFWj8InH6Ip8awIqZZt3Iyf3Y5d5NO+KbIjREHsxWM2G9g== 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=M7Cqy3q9sNcRu5cmDv8pPaEcge/MWyzSkih6YQayEPM=; b=JB/UTwnHbi3MRI4hW8jgvEVE7sZTwvkzduYpM7gZDYQlvi3L5IWyGq+rU9Uf0NhvJMzybaVxBqD0DzCnetvQlhnhtt9ocMR05N3drRBDkubBOPwkzt+xAndlqBzeAwAbyKPT/eI3Zk2LIuHiBTok9L9Eyns9wl8Armku2+eTXOF5ULWYIowPDDTZwo2YuHxCVSqNG2ofyyB9bCCAGn6P4HrBxf1YhX4xGsaZwPUtLT/JMUD12N9XJZOodndkhV3QNXLVQbG6zhXbFnfMJeMIGCz3vJeF/XtsGv8+3GoD8uj5yJstlKHAiyo53KOz5o1eWYu2Qh1s5bk57CCod8wrJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=M7Cqy3q9sNcRu5cmDv8pPaEcge/MWyzSkih6YQayEPM=; b=ZIhoSjUguNnV9xbg+dG6wTV4ZYVeEciH4LHx16PniwrYodcFUyFeL9m7fEcZB1Lhn5a5JQBRdt4harynhJ6Rq+O1a8V1zTqdyVN5YP+qY1T2hgSHYvPGodJcyVatMw8EBbmnIvTJROH7qbUgoUUlK3ujFmN8MiTJ94hEOg087cWBpfBxUVGb5ZdZZ/YRt7A+vudhZhv+u9iD5/JmjpnIZmSYcHQl7ZhoQWfNExZC2Knhfrbb0vFHRRf1EXBMQ7HVcLK95mvoWtegI5fZC43GbpTf9nvTchgkWXa2QChdaqeG1R7qFb4AIVT9sjgDdU9YnKV61KTxxZaC/iTZR1JV6w== Received: from MN2PR13CA0002.namprd13.prod.outlook.com (2603:10b6:208:160::15) by CYYPR12MB8654.namprd12.prod.outlook.com (2603:10b6:930:c9::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.17; Mon, 24 Feb 2025 09:18:01 +0000 Received: from BL6PEPF0001AB55.namprd02.prod.outlook.com (2603:10b6:208:160:cafe::1) by MN2PR13CA0002.outlook.office365.com (2603:10b6:208:160::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.17 via Frontend Transport; Mon, 24 Feb 2025 09:18:01 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL6PEPF0001AB55.mail.protection.outlook.com (10.167.241.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.16 via Frontend Transport; Mon, 24 Feb 2025 09:17:59 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:17:41 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:17:41 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:17:38 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 05/10] crypto: tegra: Transfer HASH init function to crypto engine Date: Mon, 24 Feb 2025 14:46:05 +0530 Message-ID: <20250224091610.49683-6-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: BL6PEPF0001AB55:EE_|CYYPR12MB8654:EE_ X-MS-Office365-Filtering-Correlation-Id: 1aba833e-4d07-43b3-81af-08dd54b4223c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: ujsgl96kqIhLpZul6ac3wqzJS6IpzWqXhF7lnD2cyRKQyqmakLJ/6Eb2xUD6pnjT7d1imJb7E3/7LadE/hXuP4MR9VhKy3AFgxf+i5czYW7masoHNdjoS9KmGAAXFZta/ZXbuzjt2lTEQnB8+ET1LdQyU7Ebhs6HAIqWxzQXj6lHNakLKTMi8HS05y4AiAb/J8/pUQ0vEqC/jcuVQ4TzesA1fq1NiEw72U2pYztyFWgCf78sJsChFJelZGV0Rc5LTLbAXC3gZpRDeXYr3i8ESZXgfr6a0YNlTI6Gox8rLvyfpIdP56BSrPi6lIeucrGMpMMroxujCav5FGsWk5CRsqOh8YXXGsq4JlsCx+JLu22Z8uYxvouqAvKzHeWw+cN74Rf3K5KMW9wET+Akvi6AkgKvsr4z2/myINnp3QEGE/0Fe27djbcgpoHw2CHt2CsllbTbeCwDOglZhcXjt/vmJwpPyjfp5xgp3ahpCmBDFqlU/hMgZkPrVugwuFZF9kukzQhK+FgYyux871nMqzl2w2XVe8qk/py/Qki+JFueRKDuo6ySzBn5vk+KnOWklgGmqYYPH1mCLLYtT9uaHS5XjEHHUu+HzVxgHRNWUjbRwOy8wvlLpx1xHLbtsxClhroLQhuweFhmotVxJepY4bg/EzSsMxqxRQBpjY3zICo29GsSTRZAmty6IcXuEkGuWGpDZa7Kag/uXlmHPlZJNyT36YB3lJy8PSLtRQed/Zeeu7Iyjn1wQPliTZuOHqGBEzUPHTaFehsWmchUC9cWyZo9ISJdlPOJsXd8Tlyzb9Lvmpm08Jqy15+QwmPKn49tiUVtwPOjlBtxL3N2H17DEU3oYFjJgqMzIhv6UyBkJ4hCda8K19I9dWd15Vp0jggiiyHBiWU19lFfYaoR0tx88DWcMDJYY60W92L9UZOa4BE6v+sTjOGoe493L2LBMAKnI3m6onRm4bOsOn7Ijj9BtCmgCRaK3Quj2z7xIZCUrw38e3l2zbbKa04GmAdi40WN9xG9+6vo6egMmhdrdDQxRmIj35Pj2r1U25pBYUHgbU9wbPk9Sp2uBRu/Pt869Z0anGP4FCcwHBrwGUeTHhnb4Gb3EuF2qq/kUvn5f3XOQIEfUEY8ZqRMaQyAjj8RIjQxql3ErLDtkiwhx90Gq+gKnPeQdyHDJI67U9u+oi/D99kF3y7EcZlkXns1jNmemNOvdhNhr+xh1y2tqW3aiij/WUvskhkt+y2sv5hUcKUxR0DQXuIKqREZTchuDqG1ZcZPEFH30hqBoukFPE3EI08jZ+TszgwcK6xULTjvDfjJZOQm1RdpO1/iL4xS06yl1UGl1OPVtrNFWq23JjJIZCuYSkYrtJmVBCWqiiIMTdjRFzK/Gjb8Qg3aFgbYKnA1BK05wzmxIS8Q+F0rOBBVyg/h62sFixuJ5tdywX10t49lCvgSoa13/ya1mQsqiE5ns3uUYVOSHeDe1SKi97l1th/E93uuxikRXA8cQw6h/E+dPHweAtk= X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(82310400026)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:17:59.9840 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1aba833e-4d07-43b3-81af-08dd54b4223c X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB55.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8654 Ahash init() function was called asynchronous to the crypto engine queue. This could corrupt the request context if there is any ongoing operation for the same request. Queue the init function as well to the crypto engine queue so that this scenario can be avoided. Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-aes.c | 81 ++++++++++++--------- drivers/crypto/tegra/tegra-se-hash.c | 101 +++++++++++++++------------ drivers/crypto/tegra/tegra-se.h | 5 +- 3 files changed, 109 insertions(+), 78 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index 5ca7996ecc6d..13d76de2bc81 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -1459,6 +1459,34 @@ static void tegra_cmac_paste_result(struct tegra_se *se, struct tegra_cmac_reqct se->base + se->hw->regs->result + (i * 4)); } +static int tegra_cmac_do_init(struct ahash_request *req) +{ + struct tegra_cmac_reqctx *rctx = ahash_request_ctx(req); + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); + struct tegra_cmac_ctx *ctx = crypto_ahash_ctx(tfm); + struct tegra_se *se = ctx->se; + int i; + + rctx->total_len = 0; + rctx->datbuf.size = 0; + rctx->residue.size = 0; + rctx->task |= SHA_FIRST; + rctx->blk_size = crypto_ahash_blocksize(tfm); + + rctx->residue.buf = dma_alloc_coherent(se->dev, rctx->blk_size * 2, + &rctx->residue.addr, GFP_KERNEL); + if (!rctx->residue.buf) + return -ENOMEM; + + rctx->residue.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; +} + static int tegra_cmac_do_update(struct ahash_request *req) { struct tegra_cmac_reqctx *rctx = ahash_request_ctx(req); @@ -1604,6 +1632,14 @@ static int tegra_cmac_do_one_req(struct crypto_engine *engine, void *areq) struct tegra_se *se = ctx->se; int ret = 0; + if (rctx->task & SHA_INIT) { + ret = tegra_cmac_do_init(req); + if (ret) + goto out; + + rctx->task &= ~SHA_INIT; + } + if (rctx->task & SHA_UPDATE) { ret = tegra_cmac_do_update(req); if (ret) @@ -1684,34 +1720,6 @@ static void tegra_cmac_cra_exit(struct crypto_tfm *tfm) tegra_key_invalidate(ctx->se, ctx->key_id, ctx->alg); } -static int tegra_cmac_init(struct ahash_request *req) -{ - struct tegra_cmac_reqctx *rctx = ahash_request_ctx(req); - struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); - struct tegra_cmac_ctx *ctx = crypto_ahash_ctx(tfm); - struct tegra_se *se = ctx->se; - int i; - - rctx->total_len = 0; - rctx->datbuf.size = 0; - rctx->residue.size = 0; - rctx->task = SHA_FIRST; - rctx->blk_size = crypto_ahash_blocksize(tfm); - - rctx->residue.buf = dma_alloc_coherent(se->dev, rctx->blk_size * 2, - &rctx->residue.addr, GFP_KERNEL); - if (!rctx->residue.buf) - return -ENOMEM; - - rctx->residue.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; -} - static int tegra_cmac_setkey(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen) { @@ -1728,6 +1736,17 @@ static int tegra_cmac_setkey(struct crypto_ahash *tfm, const u8 *key, return tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id); } +static int tegra_cmac_init(struct ahash_request *req) +{ + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); + struct tegra_cmac_ctx *ctx = crypto_ahash_ctx(tfm); + struct tegra_cmac_reqctx *rctx = ahash_request_ctx(req); + + rctx->task = SHA_INIT; + + return crypto_transfer_hash_request_to_engine(ctx->se->engine, req); +} + static int tegra_cmac_update(struct ahash_request *req) { struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); @@ -1766,13 +1785,9 @@ static int tegra_cmac_digest(struct ahash_request *req) struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); struct tegra_cmac_ctx *ctx = crypto_ahash_ctx(tfm); struct tegra_cmac_reqctx *rctx = ahash_request_ctx(req); - int ret; - ret = tegra_cmac_init(req); - if (ret) - return ret; + rctx->task |= SHA_INIT | SHA_UPDATE | SHA_FINAL; - rctx->task |= SHA_UPDATE | SHA_FINAL; return crypto_transfer_hash_request_to_engine(ctx->se->engine, req); } diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c index 0ae5ce67bdd0..07e4c7320ec8 100644 --- a/drivers/crypto/tegra/tegra-se-hash.c +++ b/drivers/crypto/tegra/tegra-se-hash.c @@ -296,6 +296,44 @@ static void tegra_sha_paste_hash_result(struct tegra_se *se, struct tegra_sha_re 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); + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); + struct tegra_sha_ctx *ctx = crypto_ahash_ctx(tfm); + struct tegra_se *se = ctx->se; + + if (ctx->fallback) + return tegra_sha_fallback_init(req); + + rctx->total_len = 0; + rctx->datbuf.size = 0; + rctx->residue.size = 0; + rctx->key_id = ctx->key_id; + rctx->task |= SHA_FIRST; + rctx->alg = ctx->alg; + rctx->blk_size = crypto_ahash_blocksize(tfm); + rctx->digest.size = crypto_ahash_digestsize(tfm); + + rctx->digest.buf = dma_alloc_coherent(se->dev, rctx->digest.size, + &rctx->digest.addr, GFP_KERNEL); + if (!rctx->digest.buf) + goto digbuf_fail; + + rctx->residue.buf = dma_alloc_coherent(se->dev, rctx->blk_size, + &rctx->residue.addr, GFP_KERNEL); + if (!rctx->residue.buf) + goto resbuf_fail; + + return 0; + +resbuf_fail: + dma_free_coherent(se->dev, rctx->digest.size, rctx->digest.buf, + rctx->digest.addr); +digbuf_fail: + return -ENOMEM; +} + static int tegra_sha_do_update(struct ahash_request *req) { struct tegra_sha_ctx *ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req)); @@ -435,6 +473,14 @@ static int tegra_sha_do_one_req(struct crypto_engine *engine, void *areq) struct tegra_se *se = ctx->se; int ret = 0; + if (rctx->task & SHA_INIT) { + ret = tegra_sha_do_init(req); + if (ret) + goto out; + + rctx->task &= ~SHA_INIT; + } + if (rctx->task & SHA_UPDATE) { ret = tegra_sha_do_update(req); if (ret) @@ -525,44 +571,6 @@ static void tegra_sha_cra_exit(struct crypto_tfm *tfm) tegra_key_invalidate(ctx->se, ctx->key_id, ctx->alg); } -static int tegra_sha_init(struct ahash_request *req) -{ - struct tegra_sha_reqctx *rctx = ahash_request_ctx(req); - struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); - struct tegra_sha_ctx *ctx = crypto_ahash_ctx(tfm); - struct tegra_se *se = ctx->se; - - if (ctx->fallback) - return tegra_sha_fallback_init(req); - - rctx->total_len = 0; - rctx->datbuf.size = 0; - rctx->residue.size = 0; - rctx->key_id = ctx->key_id; - rctx->task = SHA_FIRST; - rctx->alg = ctx->alg; - rctx->blk_size = crypto_ahash_blocksize(tfm); - rctx->digest.size = crypto_ahash_digestsize(tfm); - - rctx->digest.buf = dma_alloc_coherent(se->dev, rctx->digest.size, - &rctx->digest.addr, GFP_KERNEL); - if (!rctx->digest.buf) - goto digbuf_fail; - - rctx->residue.buf = dma_alloc_coherent(se->dev, rctx->blk_size, - &rctx->residue.addr, GFP_KERNEL); - if (!rctx->residue.buf) - goto resbuf_fail; - - return 0; - -resbuf_fail: - dma_free_coherent(se->dev, rctx->digest.size, rctx->digest.buf, - rctx->digest.addr); -digbuf_fail: - return -ENOMEM; -} - static int tegra_hmac_fallback_setkey(struct tegra_sha_ctx *ctx, const u8 *key, unsigned int keylen) { @@ -588,6 +596,17 @@ static int tegra_hmac_setkey(struct crypto_ahash *tfm, const u8 *key, return tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id); } +static int tegra_sha_init(struct ahash_request *req) +{ + struct tegra_sha_reqctx *rctx = ahash_request_ctx(req); + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); + struct tegra_sha_ctx *ctx = crypto_ahash_ctx(tfm); + + rctx->task = SHA_INIT; + + return crypto_transfer_hash_request_to_engine(ctx->se->engine, req); +} + static int tegra_sha_update(struct ahash_request *req) { struct tegra_sha_reqctx *rctx = ahash_request_ctx(req); @@ -635,16 +654,12 @@ static int tegra_sha_digest(struct ahash_request *req) struct tegra_sha_reqctx *rctx = ahash_request_ctx(req); struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); struct tegra_sha_ctx *ctx = crypto_ahash_ctx(tfm); - int ret; if (ctx->fallback) return tegra_sha_fallback_digest(req); - ret = tegra_sha_init(req); - if (ret) - return ret; + rctx->task |= SHA_INIT | SHA_UPDATE | SHA_FINAL; - rctx->task |= SHA_UPDATE | SHA_FINAL; return crypto_transfer_hash_request_to_engine(ctx->se->engine, req); } diff --git a/drivers/crypto/tegra/tegra-se.h b/drivers/crypto/tegra/tegra-se.h index e196a90eedb9..e1ec37bfb80a 100644 --- a/drivers/crypto/tegra/tegra-se.h +++ b/drivers/crypto/tegra/tegra-se.h @@ -342,8 +342,9 @@ #define SE_MAX_MEM_ALLOC SZ_4M #define SHA_FIRST BIT(0) -#define SHA_UPDATE BIT(1) -#define SHA_FINAL BIT(2) +#define SHA_INIT BIT(1) +#define SHA_UPDATE BIT(2) +#define SHA_FINAL BIT(3) /* Security Engine operation modes */ enum se_aes_alg { From patchwork Mon Feb 24 09:16:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 13987642 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2053.outbound.protection.outlook.com [40.107.244.53]) (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 C816524A05D; Mon, 24 Feb 2025 09:18:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388708; cv=fail; b=t5zPOnyDoyfad9o6YroQdkxT3wPU/4LBeLGjFBeqrKWk/UtDF42+gp2t/c/9W6I+SdA+D2j+O2ze0GVwb+5nWCQKjSSqd44Afs/TEaDbbiOTWJEVS7HrueCprjuuTT4xRq7BmQH+TIhh+uc/vZf7KMxArZUDkzAR4cM267cMCX4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388708; c=relaxed/simple; bh=Qywm3nTMex5ITrZzQf1wMMCgzSZVAS/DKmLx3FdJiVU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PEVWC+GGP8AJgLVKw2xZOl4Grg2yz+NyBI/wLwGVsCg9B7BCjSEx58UmUhk8s+sFWjDwe/VK+miAZEABhACoSNmvEfVTBejnAosY+vtBZnGJ20r1AV/3/puWLVciinzFsp2YQz875J8W7MeHBFsy25aJZxaZlYvH9iZOXX3hySA= 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=ooebYysK; arc=fail smtp.client-ip=40.107.244.53 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="ooebYysK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=c4OBsV1ekwnxlFeIKF3UR8GgiVzQtL8kxVId4vKRAq2ueIc2RcKftSZFC7K8OxgHnT9PPW5O/0fR7PtZffheaa2s/mrztFKxS62NhbXTI8OMhDOUJKGlOd6LyvIM/JiQxLzyf2bzWEi2kUTox5UAR25me0ud6HgrZ5WSs+K/MtjzO6plJ/DJUZOM/cmgtKO6q2n839Ad8Az5lOzZVyENgftNvwnrzNhvxIcg9zzMZF2gRPug0WsFiHy5LWmT01OOJPs/VLHPceMbtXJGmCWNYGRrdWamLhtZhZMXrEwFsMJnpgkTQjx0eYg2pKS1fBLYCOKjrcjhDFNYQzEekrRbug== 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=pa4G057SGVkS8OmMwtnMM9uWi38TDqLI2kWxXJuIB90=; b=v/kIDlFZoAcr5U0ODQ11LMx+c4Casn7xjYWX4fNKOxkurKATjOU8WDRlW1YuQRH7ZghTUm6PhiLwYnaQ7AMrNtUAgGWJfhyly1doT8LGxi/Pt10ny1bjqXhXsb3BTJ8+TCFSYiOtd9KbiHj5OQ61OqXYaLGk9vWu/3N9/ywXhrg5v7wdCoDTSWRtteWeGFc4DEX03yrfVAmmAb57Hwgoaf1ZBim6yS5sBfpbpNf02PFb1pf0Yl0IHy0pUiAjR+F1nWXmr38kLuza6w4P655rpZa8iykCCM9cI5WySd/mInNf6fkrgS7ALC40S8chPl0yqgwlnfe5Z7AJ3IdxxUZ+Qg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) 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=pa4G057SGVkS8OmMwtnMM9uWi38TDqLI2kWxXJuIB90=; b=ooebYysKCOGo1IGHC3ahLzgDYPya9pkDWHmLL4rAeK4rkUEGINbVty2lXSf8bgKlg5S7WOVQ2fdl+Nxx3CfTN4zylFi/iHUzouXsdFKeLgyR6qvAUaPXeVVnbeIXEcD7iuORfb9gKEiws9h47A8PF64Vyl2lwxfrHvxAGXEjNU/SsakLPeejWVveiQ83sw6xuEvHgLfpyNJ/oq6P/6ohPYhp/4KljpWACO/fMG09eXkoSTIKqGms4U0RpJYmgQ9rkQFifGeUkKbHXjDNybTD7557kSAxqlFgxDiXSEoW4MKdcOivLLKgUTkGOSbZWgUVuapNR1HauF/pz5Nd9bzoLw== Received: from DM6PR18CA0033.namprd18.prod.outlook.com (2603:10b6:5:15b::46) by DS7PR12MB6093.namprd12.prod.outlook.com (2603:10b6:8:9e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 24 Feb 2025 09:18:18 +0000 Received: from CH3PEPF00000016.namprd21.prod.outlook.com (2603:10b6:5:15b:cafe::f3) by DM6PR18CA0033.outlook.office365.com (2603:10b6:5:15b::46) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Mon, 24 Feb 2025 09:18:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by CH3PEPF00000016.mail.protection.outlook.com (10.167.244.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.0 via Frontend Transport; Mon, 24 Feb 2025 09:18:17 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:18:09 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:18:08 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:18:06 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 06/10] crypto: tegra: Fix HASH intermediate result handling Date: Mon, 24 Feb 2025 14:46:06 +0530 Message-ID: <20250224091610.49683-7-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: CH3PEPF00000016:EE_|DS7PR12MB6093:EE_ X-MS-Office365-Filtering-Correlation-Id: 7107405a-4a87-4d5f-d6cb-08dd54b42c9c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|376014|1800799024; X-Microsoft-Antispam-Message-Info: r0c/J8fNJWH7rEjNwm562m9xImdyWTrwwar8w7yQuY+WyPvTl81YXnmyLxUI9QfcBYXPof3vACwzJnBIIzX5hTEs7myFK5esENCBNxb3cq0gtOmG33ix/kUdK95qGwPHFH8x8+Q4ouyC9IO/DITQ6tYzCTfIfJL3az4O9F1zje1Ek2QyEPrcPbd0IPiZ5oWrW2qBn0kSELkeTQc3/umIuzHTqRitPJzKS4FgV82ZMI1VY8LXHXaYRTtblKR/QuKpQ9m88Jwfq8omtgv3uqBWXDqQ4xT8EI5MEwvtXkM9x3Snpt2m9ficbYEZg/OLIrR7hTrhg3Y9L/GsyfwFViCT5Oqffcdkr6f+vnZTQeBhK7ykl6nkL/+ORtmPu9urf52fUM0YSzqanzKx5s0/gfE7X9N89eAlZHlrFUs/8sGt9nkAVS9luMF+8XVwzjaIjKICh8lLlKeibWXjpSMDkc8ZR7+mBrnAnr3nTvRqzRgDjvF9mZ3y5838YEJc3bBbVgvlO8xu4QrvCmsMHcQhHfAEOTa/QnrWy6f8ftzD5Y7zJm6OV6nSDqM6FiBCcPcJtzsCIYc1fxN7qjLC0wPATtgGieQ4keKg/pI3/ROAJzKqLzCqGXIntfLT0jn4JPhefqDkxW6HfhDl5gNkm+ZshzxLIRaIHW3hf9Am4hF1lhGFuL2d9H6pxyYdv6tG0JgtSUK9ftFWi4VlqVoymYEVrTgqyRp0WWUg1XF1fXcq//K3L7h1RD5DKPr9H6WV/JoUJ7sfTuyOiaHs4cHlJ+XbWnZx8vtkhGHhabRLjDkmDhjgVLq6spQjshmmpObaQ7BSubEhhvt9HNTNrFWQHlRsn4uatrfGTniaYRIxaYXGpk6I913MZo2osa/0zYqU1D9zljXHBlK/jRAWs6a+ae9CIGS6uuTO27byyhzeE0UEet11+11+T7RPgyFhrBcs6RVHY8/fZoXsDMfq8xJVYEwW2ByP0bquS10HGRkw74ngxtmhzFLbGNIXzD8SBl/GyVJmCrxCHFMuQ1ud6iYcQkxIF/KSf6EtMSt5nCPgX5XMySPPdhN+CZVBacnUPNzh2fWRDjiNyreS5JxowMbwHSBd9U48okF+1U1prDrffTLEsN/G05dPz3KLbQO6DH+U8BIzhk4uluMvIxK+iAq4K6NwaBnAQ4KzQ7oFBHOrZlfZ2u6HhwD/Fb/Uf+seHhoPpit//oAdqsSyMWXm13O1VvtPQB3YD+m35BnOGRlyEaBWE3nv4UgWxNwafce13cuatEGh1vNzRVldad9bMyTErjpYeRkZMpjy5uOHeNkcXFwEMJSTPMTK+x3QXso1TqbWCAOrfrx5caHwSQBIG15o4am3DToZsTKCJ4zlhh/u8x42aQo1OcYtRjRAwqHXDA2QhuiI99jmQd+agjTKw8UMp1xBZDKsMv2oPf/6befLS7+QcLN1hMY+LXAXxdhUqeEAOqu8YnYDxi3WALGqtjfSp+X9EYKoLPU1/zgYDj6GSb4lwGQP07w= X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(376014)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:18:17.4238 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7107405a-4a87-4d5f-d6cb-08dd54b42c9c X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000016.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6093 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 | 149 +++++++++++++++++---------- drivers/crypto/tegra/tegra-se.h | 1 + 2 files changed, 98 insertions(+), 52 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c index 07e4c7320ec8..8bed13552ab9 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,62 @@ 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) +{ + __be32 *res_be = (__be32 *)rctx->intr_res.buf; + 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_be[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 +295,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 +303,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 +334,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 +375,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 +415,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 +423,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 +445,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 +485,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 +502,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 Mon Feb 24 09:16: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: 13987643 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2080.outbound.protection.outlook.com [40.107.237.80]) (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 92B2724BBE1; Mon, 24 Feb 2025 09:18:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.237.80 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388717; cv=fail; b=WcSmxxasOvuC89/HgUgMQqHgFFIlckhdgHmBc54oS0vsF08bFfU7iWMuw89NQkFefYoE4/L6ZHPa/wTUvAkAla92iiX1w+3duqyEai6wt72iJBDdEDjLSZAY3XFFQ6BfkETnPjYTkKKsMYGvHSFSPh4Zk67d5z/bCBvhHhQ2SSw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388717; c=relaxed/simple; bh=Mftcss/FqQfGLKtcGgo5SXM8LBB7b5i7tW0tnL1/ldw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HvsFNPoM4hl1BZ51aWJ9HNSYlQ5ww1EanraohU4Fvvs4dyD087xujOppix+JIaj4clYsaWnID+lXr8ik4R4HoVKVSlvxCH1tRZ6TQzUd+PmBQQuGW7xy+vee+6WHlXlfIXrc1d122Iq/pn1rtidDp/hOOh0xrA24S4txmjxiJ0U= 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=mZgcAJj5; arc=fail smtp.client-ip=40.107.237.80 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="mZgcAJj5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Gxeb5ZtBSaW3AU+aqK1oeRVOf5bKQ4QsumZ3wQYoygmjTytJ4RaqXm60b1Qk2M8oFDSykHHWYDbXfXs9uNIemZe03AFolJdxnADtCcA6YCOZB07/5CZtSE5H6vViPdn9u2zXBnU7FuXCNgxwa55TUxx6/PgGkiXthyTvnc7xCJdi1FBpiIxt6nUE477c6vacWpItr8JHft3FthwGLcL7Xk9rMzjNHCrQKQJ3YmuhHncJUCxVrV+FhBlnfLyUeGQeG/e9FsTRYWO2R8Xf0BKpSsJs3rn+EbiRwu3HzwuCx23pvt+w9WZPY4w/m8qG62GJ7Iwzzz9O7+DewTmDCtQtGQ== 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=d7p5uACi4DAiKAn/tNn/+x8AJQF8Oaps/+l0VkxOINQ=; b=irpkccSjPXyZq5rEF5fgO0ydxf91jlSYbEBYe8RY4g9mUpfOkha5EQbVgSvm3h7YGBXpway81LnRZBRbjxOkaL2SVKd2QXkE+t+612SL2IkiOx/nbqAnS9T4HOrtwa++Sg45YwzZzIPfOL1iK3G6VGDkZUn/ug+fiZ3bnLoOcFWQg03WE7jLANlKKuOoG59CXZwxn1Wq5F9hURT5RbhHcajyc1iddYpUbT1A9lRNClMzI2rKv9V6Rsb2oGKXR4uy97h6kZEy8UVIu53XXms4XQs6709A2vX37TvsbhOW3WJ3IS8KaqVlPIY4ayObValwJAs0eaQXeTmqEfhMN0tmwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) 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=d7p5uACi4DAiKAn/tNn/+x8AJQF8Oaps/+l0VkxOINQ=; b=mZgcAJj5BUnqP/9JF8nZBtJXjoBpiKOl06Hh0AsF9zjo/o/c+AoTt9/uod4JRCad7tq7icJW9Y/KGNyG+PDR7g42m7motoaRPcWO9xCRNUnfpA2fZXYFkvhQECrea51fVDLTMwC98zrEC3bnXx3XeRGHP26ijIdXioMGYbCFyD59uxi1fBD+qXZcK/E+ayBvGxgXR8XwFojtHqn/Adq5SsmVvnO7Wi5NCPXLCDZidesDnHQBpZkAftwBIHeY0rFZyP1gQ9l2qh6OVA28WN9x7YBCNItSSMSYTdGR6W2MWMEIsjLftOMvAEtPJDlzMbIlDzk7BXV7NlGZ9URu/Op9IA== Received: from DM6PR18CA0011.namprd18.prod.outlook.com (2603:10b6:5:15b::24) by LV3PR12MB9234.namprd12.prod.outlook.com (2603:10b6:408:1a0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.21; Mon, 24 Feb 2025 09:18:31 +0000 Received: from CH3PEPF00000016.namprd21.prod.outlook.com (2603:10b6:5:15b:cafe::e5) by DM6PR18CA0011.outlook.office365.com (2603:10b6:5:15b::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Mon, 24 Feb 2025 09:18:31 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by CH3PEPF00000016.mail.protection.outlook.com (10.167.244.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.0 via Frontend Transport; Mon, 24 Feb 2025 09:18:31 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:18:22 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:18:22 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:18:19 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 07/10] crypto: tegra: Fix CMAC intermediate result handling Date: Mon, 24 Feb 2025 14:46:07 +0530 Message-ID: <20250224091610.49683-8-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: CH3PEPF00000016:EE_|LV3PR12MB9234:EE_ X-MS-Office365-Filtering-Correlation-Id: 01948040-24b1-4fec-9eec-08dd54b434df 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: jjrGvOo8placmXih+vkCLYSivq0aa0gXjjiuk+1Tzb82MqMq845Pv0xIbWFg9ZMR5XDsmB0r6thYTLRc/8im6s/eUGk6ocsyO69GtYcR2rw98KZbTW2atGmlPt6Y0wdEBZdagVBwsP8i7MnIKzsWVRQb1lWVfpPV51X1KNgk06os91p+/No8L3li39ieupjx5TzvFAfCO7PaNMTRM1TyE+wxCDKDW4mscN4tjUKxpbqhWSEZcJWC1ttG7twzx8WdA/lSt/j6MG8pWpAo2dvi4VRlb/bJWUU7lnKn3Mr0E6QbTG8nbhsnLemHyBnHopHjioHNOayb+wcJF9j/XoFHSMhEHzeYHm1y649PHkYDaIJrEVV25mCv5GS/ufszz7zuvW0cNLbej05fKy2uT+ujznV6bidvBO/JkWCTVsRZ71y+kUFF0MvcwQTiLzu/ov3seTzfM3155cB3sWm2ivi8dEWW1bVpB2p1oTbu4uLA9NmKT6R6w3Rl86frmwoll3qCsBlJD514YZtD1f87/8+YyrGzysX0UAVv0bvbKgOzVcnUXsxqtC+QkzOU/cUkuSIrXCxp5TbwFSYmsoAwPO0KNDBK4glnYcf4br9fQifeoqlxUjHVIH9q6MLNs8X5PNN6ipT09kyQDJOcvD8Nt/WH3a7Lm8/eOsXFbGwzhv+CSRk2pvCgk7P5j+H3yZypozphchsCpCt1trBJVjLoC4Jci+n5/fm/rp4+P49IAkY7IxqXZZ/ZSSc/c/7i6OTQZIuxIQ8ln5SqOSVQUboMtftT/z/es3Mw7L1FCSV33xVwB8jd4w6W2hlCxFFlHmlmmu6ItGnCmyWCBi9SG+7J5vpjuPZlhJDyPw4g49CQ3XTfEmwYDTXLHhMq0YI36EDJM+QlBDwoV6ATtt9NyN5OfESKmWEmHVzEIFb1ur/l8vzH7PQbMDhI1XbqYpZ30/1ulvAFzrkiHnluscvz1QlEv0MVKOe4JKBrAS2QiNJeSZStZc7dRsPu5vFLuJqfD0iAji6krbutpJaOqtGRBu58EI3mnJqzbOrU/5KaZSvh5Tu/6kk+AQt/ZyXx8yr66PWlktLXv0mw+YXV7EgOQUS+2hs+ZWZ+bTMggTRJOxl4YWS+mDBQiQCMJnT/rmzIdSPKYIOtPeeAlltpxpZL5yG9WVbX1Z4RnNb3rSoLh9Vh4Cj/AOQGeVZpU8LzfPHbX9gJmPCwm+m24PoexK2xlscjHJmdnDXXJhttpRFM3PG+6GdR5iNnmiJ9/vFCDvgyYn1BjnVrlz5SdPhAvzxVhCrQQmha5nt5d+2oOSj0Y9iKIYVTM7BrjaDx+FD28yMbYB5+Ypr9ZYl5j7vLCSY+FpdN4CcEj5K66b4chsEO7Zl+COVHF2ps05Pbpm2GaC5yjKps+ZFSlnrb4fQFiVTWFOScBfFzPcWHxeMyrmEmYX6PNxQQbapiGeevqdXjTr8NWXuJ14gGrTWpsJ4jiklKNERGzoY/WRnOx/uFOkKr9LTxwpimw6w= X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:18:31.2989 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 01948040-24b1-4fec-9eec-08dd54b434df X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000016.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR12MB9234 Saving and restoring of the intermediate results are needed if there is context switch caused by another ongoing request on the same engine. This is therefore not only to support import/export functionality. Hence, save and restore the intermediate result for every non-first task. Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-aes.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index 13d76de2bc81..c3afa8344e4a 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -1547,9 +1547,8 @@ static int tegra_cmac_do_update(struct ahash_request *req) rctx->residue.size = nresidue; /* - * If this is not the first 'update' call, paste the previous copied + * If this is not the first task, 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_cmac_paste_result(ctx->se, rctx); @@ -1557,13 +1556,7 @@ static int tegra_cmac_do_update(struct ahash_request *req) cmdlen = tegra_cmac_prep_cmd(ctx, rctx); ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); - /* - * 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_cmac_copy_result(ctx->se, rctx); + tegra_cmac_copy_result(ctx->se, rctx); dma_free_coherent(ctx->se->dev, rctx->datbuf.size, rctx->datbuf.buf, rctx->datbuf.addr); @@ -1600,6 +1593,13 @@ static int tegra_cmac_do_final(struct ahash_request *req) rctx->total_len += rctx->residue.size; rctx->config = tegra234_aes_cfg(SE_ALG_CMAC, 0); + /* + * If this is not the first task, paste the previous copied + * intermediate results to the registers so that it gets picked up. + */ + if (!(rctx->task & SHA_FIRST)) + tegra_cmac_paste_result(ctx->se, rctx); + /* Prepare command and submit */ cmdlen = tegra_cmac_prep_cmd(ctx, rctx); ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); From patchwork Mon Feb 24 09:16:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 13987644 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2067.outbound.protection.outlook.com [40.107.236.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 6EE14243964; Mon, 24 Feb 2025 09:18:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388739; cv=fail; b=RWJmS39Fl3X0396teN0ihyPou1HcAXVN1Q4mRu1d3UIl8zHavsVoaWpv/KomUr9RhpRTun6sctNsvksF21P0bA4zsBzYE6HzIuQ836t9FjeQrxHK9+E+ovdugfIP5mErDzCsXL5fX7IlfTN01C1+uQICoMXvKgOYmllPpn+PZGw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388739; c=relaxed/simple; bh=h8EGX7YWOVRd8IsjeTyMQGPSBRM61jsMUjMFnuI5N50=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tsGC2eQuqPVAUEn368lpIkBJC+yL+okOVHCrk12NQiNBWN0xYWrybamsRU9uCUqAYtfMuLDFggoQdorV8845lso3D4ztu6iBasKO65RN78L5gbHQ4xe+CocC4IhvvVI2wfYK8k4x2eWglUdY9hWDE6Ab5346lqhQBaGLW/kfe5g= 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=DSM8a3Ge; arc=fail smtp.client-ip=40.107.236.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="DSM8a3Ge" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=c+LJjq0sTA8fBotYNUjiXyqmubgt9l/cuxslkUaIFMmtiS7cgNgNRuC7erx3nn0sglmObRdVernk6qfQUQWW04ysqxRJAc+N9Xie0mXLQAtU0d5EadgYx2DTY0pYdDBkXH1EmQNUNr18sfPYRlPyv79Zt0oI2acPSGBnCUHtfiPzbvF7WgUCSbNcKFZtW+2IV4zgoPhyz/ZeXO9k1p4RxrmMqNzQJfLZfq14j/+RxBz3em6QKly+8ghTTGYFjr8veonmbNu/PdrVCoKpzo1au6r3rYmTo05IgaJaUitNEYqkyXDWF5cd++lONYW37hpsf62myGH8DJm9azGHCs3EJw== 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=UfKD14AGkyUzraC+6bMfYk2iDMw+IekK5KxMa3On/UI=; b=cnXGGKhOOV8XaTTeL7VkEpH7kGytR7g3m+pus3y7+2WHIf/rsPAQRBGFZd7CR+6IV3PbayY4Q9/SULIJ7iQwiTe1icRoet+kTonbUU1Ytt+Ub8lUHilWLezsItXF49ps5oICLSnui1Ag7EfASrdWr6SCWX1KfRBFS6eC2p5gGjdQHHUvARazjg77shzvxNLhOFqS3Ta2UOs+5XKIP79FYdujGyLQSESJ+a63fbdptB8JFtOkhgIdZoHNidW2Mec+OsIKqPf/P+0jksbPfKmpudKLgIZXGoeVxwxrjJMYafNnejSub5BX0aTusPEvwppvaXWgf4W+FkdNR9SigN2Zgg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=UfKD14AGkyUzraC+6bMfYk2iDMw+IekK5KxMa3On/UI=; b=DSM8a3GeOuAaq02RTCfidfQ/xQxkM5yh806rdUu0t/PbL4d4plFpvP3xrWaZZYjZqRiAHCpqIfHyVeMim6kb0u3NrNlbktK7PDMPH/oqkXSG6pBd3fY79ih+LBzN+NrN+vr+ovK5TxPpsFBTNTUTLxreC70VZWZb4heLdIgblQdDphibQh/6LoW2dSObl+IU0hPNKV+l9pNwnjfXko0bcbj1W7GLnZqpBNghnmYA4tZMtL1pSztbzcTzXku0UmgSBKcJRpl+CkMfN8k65+ZFjw+Yhi7mxDYIlSOKM88TAsfOESoy49GDyHU4Iv7yd8S+Ug534W9P2OfoqIp+aFkvqg== Received: from BL1PR13CA0129.namprd13.prod.outlook.com (2603:10b6:208:2bb::14) by LV2PR12MB5797.namprd12.prod.outlook.com (2603:10b6:408:17b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:18:49 +0000 Received: from BL6PEPF0001AB59.namprd02.prod.outlook.com (2603:10b6:208:2bb:cafe::31) by BL1PR13CA0129.outlook.office365.com (2603:10b6:208:2bb::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8489.15 via Frontend Transport; Mon, 24 Feb 2025 09:18:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL6PEPF0001AB59.mail.protection.outlook.com (10.167.241.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.16 via Frontend Transport; Mon, 24 Feb 2025 09:18:48 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:18:34 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:18:33 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:18:31 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 08/10] crypto: tegra: Set IV to NULL explicitly for AES ECB Date: Mon, 24 Feb 2025 14:46:08 +0530 Message-ID: <20250224091610.49683-9-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: BL6PEPF0001AB59:EE_|LV2PR12MB5797:EE_ X-MS-Office365-Filtering-Correlation-Id: 23980be5-eecf-4f0c-be73-08dd54b43f2f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014; X-Microsoft-Antispam-Message-Info: uAvpSxU4vqeA0FoYYHD42Ys3Vzgr77dr2vPvqCDjhQ/XQZfRoKIrOmowOqveTOui5cROniOiBHUwidnwJi+VqTCc+8M8Jk5z+srincGsu5DgoktBzAbw7GqPKKK1Wm76OyXLiUxg3Vs4NsesfiatwGnOh6ME0JpIqMNR6Vzuhf3vm+vrYqbH+50j0ax6Cw+qxP+M0sCoCkNiWwBzPf//S9QJTPnG+tPjAn4rBKCSmVzKMqSNgguElEzUN9dn0Ar4MSJejn1HpggX3F30uwSvJsH3EEasCTOtN6Lf4lIe0Nf3r2DDwRvbAVtjTRzCoHNTSZ8MIj8+WnjkfImGdOeokk/RBBJKmaESyK650v1Qt/+FfOUBD0EzEjMzqgij+xSK0wozp1YPEkl78UQ+QhIbE5Oh8Z6E42Be+k850TtSSXOLsObs3oH87q9Cz3E9yQK/ZDlhB0xMkO2yL+mH/jnuOOaCwHdiXUqVsBiC65ZBtHvPC1YnAK8MkPPbPeLxSRSvDEyslTQ/oJ0ZyywHgp8V8B3Ky3ueKZegFQzOCPZvT6UwmM1Zg54sEAGW+ihh/FETVnOnW7x8MtSjFe5qKbbcukUEVO+1jHMipNb9s64gTZy/P+cm0TFZyTqXaFwmf3zyQN59X30gHzqW8g7xiwnYgJY35wyHfDKdDUD5bQsmlAwiGI2iGSLqQm7h8ncZEU63X9stQbRYjjWjLglLCJu6T7ITqikrqD74PsZ8YBAoT4Ws9IT106Et4NM1HYV0Q3oV7yVmuUNRS4mVfBwpT3V8mLhp0ULEUBwFAKEGx6dsqXBCh4VIzTtkR/xUq1z3C0QD+/xFOQVxAAft0J4b03ExcETrqg+bxjY7MMctiuf785xfOuAjkUcftNUqxqEPaSFSk7FudthgLjT8GmUPFtJvtnUA9woNj8KhoX6GnApyORzcwhyJLEVFrPV5PhN3mLQu9WjXPrROmN1B//VxGQWWjX9Xy9i0ReM7MU6JQila7PWEU54qVMCuR776AmnfROvDesz1isncVczQ7hwh/xuqfHQRu8SUYeR5feBD2x0t9kltS6sA3SuYJEDw9pf3PIw/ohW53f5QkGvNIP6IHw/xRuRFFBPi0K1PpXuRyt49CZNSGT7pUKR+4EWH8rv9YFsg+tTrzYadGLGZs2FmEKdwmNwpKhIK+GBHsjvzzjZYOgkBqm8htq7UYCRoMEYv/ozQsFpsmCAPo3a7ENFerMuXJmaPZmKhjA6299nBe32rLv8n80o1TjfxHu5SesioE2j8DBp0UXZwDAruf3f0RR80GIv5Hv8fr0FuEL2t8np6s5bZKboTzn4DrtInzeo+JbxOxyoFfuw53HlCZRtnluMCWSTup+iWASJjVVA0EEvE806sN/P0J9URVa3eveAb6sXSUeG/Kve6a+m9MYkTKHqKxRdLyEo2mc0UyTNvA9Jc6jCL/vppsYz/U30mRPZmLvUppW+o8ZCsLL2474F4E9REqIWHPlwW2a3mjW83JSzYyTE= X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:18:48.5543 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 23980be5-eecf-4f0c-be73-08dd54b43f2f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB59.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5797 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 c3afa8344e4a..a1b469c3a55b 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 Mon Feb 24 09:16: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: 13987645 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2067.outbound.protection.outlook.com [40.107.237.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 5DFAF24E4B1; Mon, 24 Feb 2025 09:19:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.237.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388756; cv=fail; b=XIujAsd5Z/SND7PPdz8b1jc4dopqfJDkkoeyAL92hJLCQc8hrgvCEB9BzozH08KC9i7G2n5n5u3R4dHmXKzjLse5Nj+/zymK4XbOki7Hpjl0H9BHGSTbleQAPgtSIM9ZTnGky8RFqH7J3jqJqriaNqVVhr3axXZqFSYx47nweUE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388756; c=relaxed/simple; bh=DXnbemFyt9qt3YlRoNBsOzv2w7pxqZzhPYc9i0pFW1M=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tMCsIl65kZamVT+dvnCr4zdNRj9MjuwwqNG56CYYKvxYAm+br4kxjc01t8BpQro4+X06AMIHhhDAKN6GHQB8j72YhLOw0RgEsuaQ4sAKr6Qe6nsCESDSJbtyzJX5odUHDcIsK6GXQmtPWNRg5IViI2C6oWVMuke62yX/5PP82wA= 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=Vsh5ZIUh; arc=fail smtp.client-ip=40.107.237.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="Vsh5ZIUh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eR0OMDsEYMFD2rQVVRdZILxbxtRfFMg9S0r7wDzYUh3nhS6t3GTJTqCtKHOVByyzEunMhTY3zH1lpLjytQ9cSBuv/Mu2MhyyQaGazJ28ckHqiLxQ1f3VXH5kVN0qEUF3KpDFz5w4kbsnNeWVEQF0RIOM4rEQsDlU1zRqGvNC03MLSCf/TMvXT4I5KpjtKNEdROXAAn3+js0el5Sn1m8aM+htCnRsR97GPLZCncZJh4T+sJcSHuUj3TKDg9GDQBH5Sug9gi9QDROsnlK94kAjs08teLXw4a1VnzGYT8KFzpzHECgsg0ibSTXa5Gpat972rt4+RmJaAiAZYqTqamIjag== 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=7HjBIs4EYfXrEG+cfqbwR0ZQ85mn2pMs2yqjTqoyAik=; b=WrVFLuNZ2Me49SReBu2p5xg8Phw49sMrl1tPtFkAy5xIHDIFdXPzM8rpOzAk0J2rNt3TBy17Q2NuCZ0Edo6tEox17vbTyZ/3nbZmHgpdIws+k80DWaeNrQ6cw0JvnUyFwAqcbUUSrI6vZV+DRr0SNjScDNiDd3Ls+ToTUdNR8+JkmfLqwHofSCu4k2zfw4GvuyipyU+I6sMCgMYT7Ekb41Pq72rkKgyRuLSyNQOGx9pPb2vYi+M0EsUilpaFDb5Cf4Hx4NeJxrOXdBCqJWTa/9p4+EhMl4Iyx+3xb/wD/+AeIbe9PJFQXuO0rERrGWIZGhrHnDJA908vagpyM5alTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=7HjBIs4EYfXrEG+cfqbwR0ZQ85mn2pMs2yqjTqoyAik=; b=Vsh5ZIUhpjuZAhFpXaDJsFv+9hSC9cLTQbp6nKlv6bFTwXAfP74HbQvQ6ouaPvPtDhK8eQFtjV1eCXMpWPHe9Qo3mTpthMNYIeSQt6YMrsqFSaJpJ9Z9zUT+92Eecrsk53LE6ha+30LGhw3/ekkmUJPl28diTbJH4XHbf4G9wpYNMrIk5sdPpn8pnY57rEQK+B9XsHO66SFaKzMn6Io32xRIfDgSG8CM2WV/PNeWG4cz/NJ+oXir7+mXeZMVvqVlUxCXCbcIVA8TNEu44x72keXrphPpYYntYCiwhkfWbmeNU0dbPQRX4tR+MSJnGCwTVSk2z0hr1fgoGOwMWVxBKA== Received: from BL1P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:208:2c7::6) by DS7PR12MB6262.namprd12.prod.outlook.com (2603:10b6:8:96::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 24 Feb 2025 09:19:03 +0000 Received: from BL6PEPF0001AB52.namprd02.prod.outlook.com (2603:10b6:208:2c7:cafe::b7) by BL1P222CA0001.outlook.office365.com (2603:10b6:208:2c7::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Mon, 24 Feb 2025 09:19:03 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL6PEPF0001AB52.mail.protection.outlook.com (10.167.241.4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Mon, 24 Feb 2025 09:19:02 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:18:51 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:18:50 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:18:48 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 09/10] crypto: tegra: Reserve keyslots to allocate dynamically Date: Mon, 24 Feb 2025 14:46:09 +0530 Message-ID: <20250224091610.49683-10-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: BL6PEPF0001AB52:EE_|DS7PR12MB6262:EE_ X-MS-Office365-Filtering-Correlation-Id: b1145488-2344-4a17-4e3d-08dd54b4474c 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: uuHVnajUWRkwRRMGBxij3cZEv0CvE8adV5wcytCNdQjwQmL2Q6PukyJ9Iw0GleVdRUMAS8UQc5k8AVxk3jGLPppQgMWSnJkB0nYRwm4Y4KMAfPEyuZnZrNcHhWjqESGqwb5+mj89k4Flt8VqO5c51ywFfFaM02+qaZ8qIiQhJlaZhXDl3za+D3l1HjVPmJAjv+L6uG2YfM4KQXfoF8R/UaDlcP7Th0mlNrCqRIq9fAqA+xWjHFWu6zbyYf5uUJAncE+mUAo1UqL/Py0RV6nwHR2/fRSSfcV6CLKp3GYXi1CgLStm+0r/mqUu3gq0FxaMMKZI8L+mxy8qWX5xp6w7WGEiQ4JEjUSaTJCnGbgpNX3T3SvINIlY85Kh50QCAnXicS5Ec3YVggLkHWyjEyOoWJuyiRpOD+88896AjpQ3IgJfaUPXCxRKY2Xw5//G7VxTTkcX++tNzozwR75bx7iKdA2x323yM2Ik6Oh0ztL+setUJanq4CYMj+7q4b3LES9Z1KtUyLA2DnjHk4FoCV0yQAw6Tu9GkIU7L81euQ5JDYObzihg82xZnKXLrksq9zZ34p+0q8DQRTJrN1TGn5N/0jNN3lxUUri2Au6ZlEfNWHWv0F6J5Zs9lTWyXXjQsqNaC4DEIONK9xMg+f7ESxASorqVzSPqBss/3Q5jV8wazM5Z9NifGutLKAboXVTOx3oMTbDjsXzPxBUCSWjjaFkGWbVHgfcw5tlfys5HxLYwoHdrjPVexD6QaoQlE5FT2U8PhGZL3h66UGeoGDzdZsmS38AJVp0GDXjCkTzPOqPLykvaCiakzA3hkPHyMBdqY3f9epD7ZsUGO0s6OqUup5fskJ2uoxe25bWbRyUin3yjz6ukNsiWSvlZcj4YzJbqVU/0lqL3SK/29n7mQVVBrUbWvnCZvIPApwoG/UGswZ2zQ70Xrz6d25XwSm+vY5ZufTbw1oSPDwO2FdWChMIJyXf9ci/i2F1uRSzL/qUv1e3dhqemdDMmMSiruP3qrFWUopxefPWEseSRKiYabZMcZc3Pcfh7foLAGlBFwi0budANpb3eS8wTjb/Kq8nTfUWr/vk5tPGYL/sPla/rb0TrVVbE58B/NM5XPRdepudRk075EtK2H0wU9EsNyVcmYiRJJfvXw4J8wLsmwMrlnko9DrldusbKMfuQqYS0G47J/xWKGz75nBIknD05dw4CaWFIVQ/xukbIa4ycNzYAwEw7ryAv6d5GJ0mG/Zwzy4bpvXPXEORGMYe6CPuJTcRAor8S8mRc6OitB6bP7CFe7bqTR/7lLw7LVoOxcBLexb/G3TGz2Au2s3aAIb/NP1IoaoOt6HbwJcOsjUSvkwKyrxreEj0DOyDwF4I+wEHJMLOGMLGhnIzpzmybS5XLycwgTy6ATFIVryu9QgkscR1LN1MJaxuA6WWqaOi/oBsT+i7+xgp3aWTfcAXBUbOvaFwmN5SdYOJwTrWM7iepOD52DUvzzlaAIR5gIZ9AzCKR4BI7j0wk/f8= X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:19:02.1633 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b1145488-2344-4a17-4e3d-08dd54b4474c X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB52.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6262 The HW supports only storing 15 keys at a time. This limits the number of tfms that can work without failutes. Reserve keyslots to solve this and use the reserved ones during the encryption/decryption operation. This allow users to have the capability of hardware protected keys and faster operations if there are limited number of tfms while not halting the operation if there are more tfms. Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R --- drivers/crypto/tegra/tegra-se-aes.c | 139 +++++++++++++++++++++++----- drivers/crypto/tegra/tegra-se-key.c | 17 ++++ drivers/crypto/tegra/tegra-se.h | 28 ++++++ 3 files changed, 163 insertions(+), 21 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index a1b469c3a55b..ca9d0cca1f74 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -28,6 +28,9 @@ struct tegra_aes_ctx { u32 ivsize; u32 key1_id; u32 key2_id; + u32 keylen; + u8 key1[AES_MAX_KEY_SIZE]; + u8 key2[AES_MAX_KEY_SIZE]; }; struct tegra_aes_reqctx { @@ -43,8 +46,9 @@ struct tegra_aead_ctx { struct tegra_se *se; unsigned int authsize; u32 alg; - u32 keylen; u32 key_id; + u32 keylen; + u8 key[AES_MAX_KEY_SIZE]; }; struct tegra_aead_reqctx { @@ -56,8 +60,8 @@ struct tegra_aead_reqctx { unsigned int cryptlen; unsigned int authsize; bool encrypt; - u32 config; u32 crypto_config; + u32 config; u32 key_id; u32 iv[4]; u8 authdata[16]; @@ -67,6 +71,8 @@ struct tegra_cmac_ctx { struct tegra_se *se; unsigned int alg; u32 key_id; + u32 keylen; + u8 key[AES_MAX_KEY_SIZE]; struct crypto_shash *fallback_tfm; }; @@ -260,11 +266,13 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) struct tegra_aes_ctx *ctx = crypto_skcipher_ctx(crypto_skcipher_reqtfm(req)); struct tegra_aes_reqctx *rctx = skcipher_request_ctx(req); struct tegra_se *se = ctx->se; - unsigned int cmdlen; + unsigned int cmdlen, key1_id, key2_id; int ret; rctx->iv = (u32 *)req->iv; rctx->len = req->cryptlen; + key1_id = ctx->key1_id; + key2_id = ctx->key2_id; /* Pad input to AES Block size */ if (ctx->alg != SE_ALG_XTS) { @@ -282,6 +290,29 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) scatterwalk_map_and_copy(rctx->datbuf.buf, req->src, 0, req->cryptlen, 0); + rctx->config = tegra234_aes_cfg(ctx->alg, rctx->encrypt); + rctx->crypto_config = tegra234_aes_crypto_cfg(ctx->alg, rctx->encrypt); + + if (!key1_id) { + ret = tegra_key_submit_reserved_aes(ctx->se, ctx->key1, + ctx->keylen, ctx->alg, &key1_id); + if (ret) + goto out; + } + + rctx->crypto_config |= SE_AES_KEY_INDEX(key1_id); + + if (ctx->alg == SE_ALG_XTS) { + if (!key2_id) { + ret = tegra_key_submit_reserved_xts(ctx->se, ctx->key2, + ctx->keylen, ctx->alg, &key2_id); + if (ret) + goto out; + } + + rctx->crypto_config |= SE_AES_KEY2_INDEX(key2_id); + } + /* Prepare the command and submit for execution */ cmdlen = tegra_aes_prep_cmd(ctx, rctx); ret = tegra_se_host1x_submit(se, se->cmdbuf, cmdlen); @@ -290,10 +321,17 @@ static int tegra_aes_do_one_req(struct crypto_engine *engine, void *areq) tegra_aes_update_iv(req, ctx); scatterwalk_map_and_copy(rctx->datbuf.buf, req->dst, 0, req->cryptlen, 1); +out: /* Free the buffer */ dma_free_coherent(ctx->se->dev, rctx->datbuf.size, rctx->datbuf.buf, rctx->datbuf.addr); + if (tegra_key_is_reserved(key1_id)) + tegra_key_invalidate_reserved(ctx->se, key1_id, ctx->alg); + + if (tegra_key_is_reserved(key2_id)) + tegra_key_invalidate_reserved(ctx->se, key2_id, ctx->alg); + out_finalize: crypto_finalize_skcipher_request(se->engine, req, ret); @@ -316,6 +354,7 @@ static int tegra_aes_cra_init(struct crypto_skcipher *tfm) ctx->se = se_alg->se_dev; ctx->key1_id = 0; ctx->key2_id = 0; + ctx->keylen = 0; algname = crypto_tfm_alg_name(&tfm->base); ret = se_algname_to_algid(algname); @@ -344,13 +383,20 @@ static int tegra_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, u32 keylen) { struct tegra_aes_ctx *ctx = crypto_skcipher_ctx(tfm); + int ret; if (aes_check_keylen(keylen)) { dev_dbg(ctx->se->dev, "invalid key length (%d)\n", keylen); return -EINVAL; } - return tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key1_id); + ret = tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key1_id); + if (ret) { + ctx->keylen = keylen; + memcpy(ctx->key1, key, keylen); + } + + return 0; } static int tegra_xts_setkey(struct crypto_skcipher *tfm, @@ -368,11 +414,17 @@ static int tegra_xts_setkey(struct crypto_skcipher *tfm, ret = tegra_key_submit(ctx->se, key, len, ctx->alg, &ctx->key1_id); - if (ret) - return ret; + if (ret) { + ctx->keylen = len; + memcpy(ctx->key1, key, len); + } - return tegra_key_submit(ctx->se, key + len, len, + ret = tegra_key_submit(ctx->se, key + len, len, ctx->alg, &ctx->key2_id); + if (ret) { + ctx->keylen = len; + memcpy(ctx->key2, key + len, len); + } return 0; } @@ -450,12 +502,6 @@ static int tegra_aes_crypt(struct skcipher_request *req, bool encrypt) req->iv = NULL; rctx->encrypt = encrypt; - rctx->config = tegra234_aes_cfg(ctx->alg, encrypt); - rctx->crypto_config = tegra234_aes_crypto_cfg(ctx->alg, encrypt); - rctx->crypto_config |= SE_AES_KEY_INDEX(ctx->key1_id); - - if (ctx->key2_id) - rctx->crypto_config |= SE_AES_KEY2_INDEX(ctx->key2_id); return crypto_transfer_skcipher_request_to_engine(ctx->se->engine, req); } @@ -721,7 +767,7 @@ static int tegra_gcm_do_gmac(struct tegra_aead_ctx *ctx, struct tegra_aead_reqct rctx->config = tegra234_aes_cfg(SE_ALG_GMAC, rctx->encrypt); rctx->crypto_config = tegra234_aes_crypto_cfg(SE_ALG_GMAC, rctx->encrypt) | - SE_AES_KEY_INDEX(ctx->key_id); + SE_AES_KEY_INDEX(rctx->key_id); cmdlen = tegra_gmac_prep_cmd(ctx, rctx); @@ -738,7 +784,7 @@ static int tegra_gcm_do_crypt(struct tegra_aead_ctx *ctx, struct tegra_aead_reqc rctx->config = tegra234_aes_cfg(SE_ALG_GCM, rctx->encrypt); rctx->crypto_config = tegra234_aes_crypto_cfg(SE_ALG_GCM, rctx->encrypt) | - SE_AES_KEY_INDEX(ctx->key_id); + SE_AES_KEY_INDEX(rctx->key_id); /* Prepare command and submit */ cmdlen = tegra_gcm_crypt_prep_cmd(ctx, rctx); @@ -761,7 +807,7 @@ static int tegra_gcm_do_final(struct tegra_aead_ctx *ctx, struct tegra_aead_reqc rctx->config = tegra234_aes_cfg(SE_ALG_GCM_FINAL, rctx->encrypt); rctx->crypto_config = tegra234_aes_crypto_cfg(SE_ALG_GCM_FINAL, rctx->encrypt) | - SE_AES_KEY_INDEX(ctx->key_id); + SE_AES_KEY_INDEX(rctx->key_id); /* Prepare command and submit */ cmdlen = tegra_gcm_prep_final_cmd(se, cpuvaddr, rctx); @@ -892,7 +938,7 @@ static int tegra_ccm_do_cbcmac(struct tegra_aead_ctx *ctx, struct tegra_aead_req rctx->config = tegra234_aes_cfg(SE_ALG_CBC_MAC, rctx->encrypt); rctx->crypto_config = tegra234_aes_crypto_cfg(SE_ALG_CBC_MAC, rctx->encrypt) | - SE_AES_KEY_INDEX(ctx->key_id); + SE_AES_KEY_INDEX(rctx->key_id); /* Prepare command and submit */ cmdlen = tegra_cbcmac_prep_cmd(ctx, rctx); @@ -1079,7 +1125,7 @@ static int tegra_ccm_do_ctr(struct tegra_aead_ctx *ctx, struct tegra_aead_reqctx rctx->config = tegra234_aes_cfg(SE_ALG_CTR, rctx->encrypt); rctx->crypto_config = tegra234_aes_crypto_cfg(SE_ALG_CTR, rctx->encrypt) | - SE_AES_KEY_INDEX(ctx->key_id); + SE_AES_KEY_INDEX(rctx->key_id); /* Copy authdata in the top of buffer for encryption/decryption */ if (rctx->encrypt) @@ -1160,6 +1206,8 @@ static int tegra_ccm_do_one_req(struct crypto_engine *engine, void *areq) if (ret) goto out_finalize; + rctx->key_id = ctx->key_id; + /* Allocate buffers required */ rctx->inbuf.size = rctx->assoclen + rctx->authsize + rctx->cryptlen + 100; rctx->inbuf.buf = dma_alloc_coherent(ctx->se->dev, rctx->inbuf.size, @@ -1175,6 +1223,13 @@ static int tegra_ccm_do_one_req(struct crypto_engine *engine, void *areq) goto out_free_inbuf; } + if (!ctx->key_id) { + ret = tegra_key_submit_reserved_aes(ctx->se, ctx->key, + ctx->keylen, ctx->alg, &rctx->key_id); + if (ret) + goto out; + } + if (rctx->encrypt) { /* CBC MAC Operation */ ret = tegra_ccm_compute_auth(ctx, rctx); @@ -1205,6 +1260,9 @@ static int tegra_ccm_do_one_req(struct crypto_engine *engine, void *areq) dma_free_coherent(ctx->se->dev, rctx->outbuf.size, rctx->inbuf.buf, rctx->inbuf.addr); + if (tegra_key_is_reserved(rctx->key_id)) + tegra_key_invalidate_reserved(ctx->se, rctx->key_id, ctx->alg); + out_finalize: crypto_finalize_aead_request(ctx->se->engine, req, ret); @@ -1232,6 +1290,8 @@ 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); + rctx->key_id = ctx->key_id; + /* Allocate buffers required */ rctx->inbuf.size = rctx->assoclen + rctx->authsize + rctx->cryptlen; rctx->inbuf.buf = dma_alloc_coherent(ctx->se->dev, rctx->inbuf.size, @@ -1249,6 +1309,13 @@ static int tegra_gcm_do_one_req(struct crypto_engine *engine, void *areq) goto out_free_inbuf; } + if (!ctx->key_id) { + ret = tegra_key_submit_reserved_aes(ctx->se, ctx->key, + ctx->keylen, ctx->alg, &rctx->key_id); + if (ret) + goto out; + } + /* If there is associated data perform GMAC operation */ if (rctx->assoclen) { ret = tegra_gcm_do_gmac(ctx, rctx); @@ -1279,6 +1346,9 @@ static int tegra_gcm_do_one_req(struct crypto_engine *engine, void *areq) dma_free_coherent(ctx->se->dev, rctx->inbuf.size, rctx->inbuf.buf, rctx->inbuf.addr); + if (tegra_key_is_reserved(rctx->key_id)) + tegra_key_invalidate_reserved(ctx->se, rctx->key_id, ctx->alg); + out_finalize: crypto_finalize_aead_request(ctx->se->engine, req, ret); @@ -1301,6 +1371,7 @@ static int tegra_aead_cra_init(struct crypto_aead *tfm) ctx->se = se_alg->se_dev; ctx->key_id = 0; + ctx->keylen = 0; ret = se_algname_to_algid(algname); if (ret < 0) { @@ -1382,13 +1453,20 @@ static int tegra_aead_setkey(struct crypto_aead *tfm, const u8 *key, u32 keylen) { struct tegra_aead_ctx *ctx = crypto_aead_ctx(tfm); + int ret; if (aes_check_keylen(keylen)) { dev_dbg(ctx->se->dev, "invalid key length (%d)\n", keylen); return -EINVAL; } - return tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id); + ret = tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id); + if (ret) { + ctx->keylen = keylen; + memcpy(ctx->key, key, keylen); + } + + return 0; } static unsigned int tegra_cmac_prep_cmd(struct tegra_cmac_ctx *ctx, @@ -1473,6 +1551,7 @@ static int tegra_cmac_do_init(struct ahash_request *req) rctx->total_len = 0; rctx->datbuf.size = 0; rctx->residue.size = 0; + rctx->key_id = ctx->key_id; rctx->task |= SHA_FIRST; rctx->blk_size = crypto_ahash_blocksize(tfm); @@ -1517,7 +1596,7 @@ static int tegra_cmac_do_update(struct ahash_request *req) rctx->datbuf.size = (req->nbytes + rctx->residue.size) - nresidue; rctx->total_len += rctx->datbuf.size; rctx->config = tegra234_aes_cfg(SE_ALG_CMAC, 0); - rctx->crypto_config = SE_AES_KEY_INDEX(ctx->key_id); + rctx->crypto_config = SE_AES_KEY_INDEX(rctx->key_id); /* * Keep one block and residue bytes in residue and @@ -1643,6 +1722,13 @@ static int tegra_cmac_do_one_req(struct crypto_engine *engine, void *areq) rctx->task &= ~SHA_INIT; } + if (!ctx->key_id) { + ret = tegra_key_submit_reserved_aes(ctx->se, ctx->key, + ctx->keylen, ctx->alg, &rctx->key_id); + if (ret) + goto out; + } + if (rctx->task & SHA_UPDATE) { ret = tegra_cmac_do_update(req); if (ret) @@ -1659,6 +1745,9 @@ static int tegra_cmac_do_one_req(struct crypto_engine *engine, void *areq) rctx->task &= ~SHA_FINAL; } out: + if (tegra_key_is_reserved(rctx->key_id)) + tegra_key_invalidate_reserved(ctx->se, rctx->key_id, ctx->alg); + crypto_finalize_hash_request(se->engine, req, ret); return 0; @@ -1699,6 +1788,7 @@ static int tegra_cmac_cra_init(struct crypto_tfm *tfm) ctx->se = se_alg->se_dev; ctx->key_id = 0; + ctx->keylen = 0; ret = se_algname_to_algid(algname); if (ret < 0) { @@ -1727,6 +1817,7 @@ static int tegra_cmac_setkey(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen) { struct tegra_cmac_ctx *ctx = crypto_ahash_ctx(tfm); + int ret; if (aes_check_keylen(keylen)) { dev_dbg(ctx->se->dev, "invalid key length (%d)\n", keylen); @@ -1736,7 +1827,13 @@ static int tegra_cmac_setkey(struct crypto_ahash *tfm, const u8 *key, if (ctx->fallback_tfm) crypto_shash_setkey(ctx->fallback_tfm, key, keylen); - return tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id); + ret = tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id); + if (ret) { + ctx->keylen = keylen; + memcpy(ctx->key, key, keylen); + } + + return 0; } static int tegra_cmac_init(struct ahash_request *req) diff --git a/drivers/crypto/tegra/tegra-se-key.c b/drivers/crypto/tegra/tegra-se-key.c index 276b261fb6df..bf265514b04c 100644 --- a/drivers/crypto/tegra/tegra-se-key.c +++ b/drivers/crypto/tegra/tegra-se-key.c @@ -141,6 +141,23 @@ void tegra_key_invalidate(struct tegra_se *se, u32 keyid, u32 alg) tegra_keyslot_free(keyid); } +void tegra_key_invalidate_reserved(struct tegra_se *se, u32 keyid, u32 alg) +{ + u8 zkey[AES_MAX_KEY_SIZE] = {0}; + + if (!keyid) + return; + + /* Overwrite the key with 0s */ + tegra_key_insert(se, zkey, AES_MAX_KEY_SIZE, keyid, alg); +} + +inline int tegra_key_submit_reserved(struct tegra_se *se, const u8 *key, + u32 keylen, u32 alg, u32 *keyid) +{ + return tegra_key_insert(se, key, keylen, *keyid, alg); +} + int tegra_key_submit(struct tegra_se *se, const u8 *key, u32 keylen, u32 alg, u32 *keyid) { int ret; diff --git a/drivers/crypto/tegra/tegra-se.h b/drivers/crypto/tegra/tegra-se.h index 0f5bcf27358b..0629c9a8f837 100644 --- a/drivers/crypto/tegra/tegra-se.h +++ b/drivers/crypto/tegra/tegra-se.h @@ -342,6 +342,9 @@ #define SE_MAX_KEYSLOT 15 #define SE_MAX_MEM_ALLOC SZ_4M +#define TEGRA_AES_RESERVED_KSLT 14 +#define TEGRA_XTS_RESERVED_KSLT 15 + #define SHA_FIRST BIT(0) #define SHA_INIT BIT(1) #define SHA_UPDATE BIT(2) @@ -502,9 +505,34 @@ void tegra_deinit_aes(struct tegra_se *se); void tegra_deinit_hash(struct tegra_se *se); int tegra_key_submit(struct tegra_se *se, const u8 *key, u32 keylen, u32 alg, u32 *keyid); + +int tegra_key_submit_reserved(struct tegra_se *se, const u8 *key, + u32 keylen, u32 alg, u32 *keyid); + void tegra_key_invalidate(struct tegra_se *se, u32 keyid, u32 alg); +void tegra_key_invalidate_reserved(struct tegra_se *se, u32 keyid, u32 alg); int tegra_se_host1x_submit(struct tegra_se *se, struct tegra_se_cmdbuf *cmdbuf, u32 size); +static inline int tegra_key_submit_reserved_aes(struct tegra_se *se, const u8 *key, + u32 keylen, u32 alg, u32 *keyid) +{ + *keyid = TEGRA_AES_RESERVED_KSLT; + return tegra_key_submit_reserved(se, key, keylen, alg, keyid); +} + +static inline int tegra_key_submit_reserved_xts(struct tegra_se *se, const u8 *key, + u32 keylen, u32 alg, u32 *keyid) +{ + *keyid = TEGRA_XTS_RESERVED_KSLT; + return tegra_key_submit_reserved(se, key, keylen, alg, keyid); +} + +static inline bool tegra_key_is_reserved(u32 keyid) +{ + return ((keyid == TEGRA_AES_RESERVED_KSLT) || + (keyid == TEGRA_XTS_RESERVED_KSLT)); +} + /* HOST1x OPCODES */ static inline u32 host1x_opcode_setpayload(unsigned int payload) { From patchwork Mon Feb 24 09:16:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil R X-Patchwork-Id: 13987646 X-Patchwork-Delegate: herbert@gondor.apana.org.au Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2074.outbound.protection.outlook.com [40.107.93.74]) (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 95A242512CF; Mon, 24 Feb 2025 09:19:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.93.74 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388771; cv=fail; b=auAIt4vUatC8Sry+QHMuXDPnqDobWr+ffxk0PC0eMKg9NhWDibGqJquHSXFRF47Krt6B8a6g+Qx/W2f1XqGs7Zojx6VRePGqJ/OeWvHK/G1zM9zZzlMcBJj/70FOFbqTvmZt2HxD8kmFBsbJgm+fNzmcJgpBiTQ6g/N/+ar4Znk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388771; c=relaxed/simple; bh=lHYe3Mli+tkd0oKiANZNynKgD4O8IP21Giv9eBPFrKE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=apqCU7V3Tj8EmGVTh8e+3dwEC48vUl/TF1S5+i3YOgZ8ekj24Cj12Na7izLFzV7buBeRetf8b/By0KzckaD7gNLTjJs/yc10ZEsrmWzm8U83K+KYxky6qDhMLu1JRFC1YtbZYQ0x+6XtZfJwPS0g9ivX6l0V2GKFX8Sqlg0dlHs= 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=fKNyWC/t; arc=fail smtp.client-ip=40.107.93.74 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="fKNyWC/t" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Cba1lby8+XS5P49COe9SfUecAXbH1NQOMA/u3tGtL0t9+pRPV++Xml3YvaknYu5NKls1E6X5WyuE4RAcEweP6RRpdl/KNuFSCZDntEOVozwdnLbPjQAFgRv04uiTEXyvm8MjB0ey22/7Civ3QZAldpgfAS0AX0EPT1EzjY4d5W1kCjY06VnpzO9Fc3BsG4gcwFNuiODowmhEWMA5ZZ68ylbcTscVWSqJPr5/emUY74f3k0XYg3J91es2sx2m6FbSRd52n0NPqzs5CJd/1LanR4L8YWTG0eAQRJuU0N158bBZqPgVnQb0Cv5nKn9c7RFt1TL6vkrnTyFFJpFe5lLPDA== 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=QW7LCFM7Vr0bEJ/swnOhbZMhXQUqpciF9luYxMV9xJc=; b=b94z8ORPQdwhw5uVDMmwUuHP/rnCkmGz+ZZ1SlJJe75enFwiB0/7PS8X1D6jYB6fnNCsNUhJ8GwGA/U89MEfe+USfKSxpPA+VGkhtfxbZ/9oLqurl91N7Iz6xjNLzYlecw/fbNvJRXSPRuDMT1NbVwhgUFJ0L0O431eugWLpu1mVFC7RKJpbX+JCG3eGmy/seNuA/2czb9abK5qM0Aaj69Q8OWV44sF3vIpd67mBQ+4aeeRFM+kr51SqaZdD59B4fGkbhSWiB3Ndvxy5/UmNc0m3iA9EhzXCCV1vWE+b0ZvQeyADO5kyqb4EIQN4aek4y1gSYr5QrOLT47cf3ziSog== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) 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=QW7LCFM7Vr0bEJ/swnOhbZMhXQUqpciF9luYxMV9xJc=; b=fKNyWC/t7A53j6a/OBuW0+HmqJ9/AUE1nRWEpkOuq0nEjmU2N0Y715ZssNBWI4eTb8cZ51EkDNw+wjFnnRmD2OBXUXiYWmsPwy4A0UpbcNgmiRTaDBccjFWOdJ9Z0gtSTSyKGrTPednSj/ffq9oqp8OG4bDTDhq63Zj4uBCIRxs/zbTy3kE9IW31mFlL9GLmfam521ESSy5N0oNo1Rq7fkHP8wHbbyClb+Klqr15v2peRJ0At3/lirctDh8ZjMRnu2l4NIGOl3LsZI/2mIQ0ag8LFdAi2hTL1rtRHTFxI1HUDQKB8VKolgZxVN2H7XHww3lJ9Vtxh9ce+zgCXy4OCQ== Received: from DM6PR11CA0048.namprd11.prod.outlook.com (2603:10b6:5:14c::25) by PH7PR12MB6467.namprd12.prod.outlook.com (2603:10b6:510:1f5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 24 Feb 2025 09:19:21 +0000 Received: from CH3PEPF00000018.namprd21.prod.outlook.com (2603:10b6:5:14c:cafe::90) by DM6PR11CA0048.outlook.office365.com (2603:10b6:5:14c::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Mon, 24 Feb 2025 09:19:21 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by CH3PEPF00000018.mail.protection.outlook.com (10.167.244.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.0 via Frontend Transport; Mon, 24 Feb 2025 09:19:20 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 24 Feb 2025 01:19:13 -0800 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Mon, 24 Feb 2025 01:19:13 -0800 Received: from BUILDSERVER-IO-L4T.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Mon, 24 Feb 2025 01:19:10 -0800 From: Akhil R To: , , , , , , CC: Akhil R Subject: [PATCH v3 10/10] crypto: tegra: Use HMAC fallback when keyslots are full Date: Mon, 24 Feb 2025 14:46:10 +0530 Message-ID: <20250224091610.49683-11-akhilrajeev@nvidia.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20250224091610.49683-1-akhilrajeev@nvidia.com> References: <20250224091610.49683-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: CH3PEPF00000018:EE_|PH7PR12MB6467:EE_ X-MS-Office365-Filtering-Correlation-Id: 8573c151-5a66-4c4d-d597-08dd54b4521a 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: m+HKD0FmE6aC9wWmYVH6eRQ8IunTfoC1p4fsgtSn0k7OsTJAV00PbUfZCH0wkwRCD8A803p8CizEeU+UzK9EOvDgC2uoNViFzODOwbvDNT0bwyiJX/5rTniDpgFa1FbWZoqZlnFWdH6923wt0OPQECJuuj9KqL+dowNB1t/WPSUAFjqQJXeK664PcAubcyzISGxAmmKXcnknMzPJxpKXVBw+BXuv034x6zIG4hAC4cWlL1hywtxYcEEjBXc98WAgaZonygBdN3mw+B7F8Cn+/pacD+h7DvX2M6/+xNvlq83fUNoOGRoa7T4xx2qP/vVG2AWheyjB4bdmf5zyIECnb2jNXbMOgC6EkTXLJu72UhF7Ay3YDnlMUr3EsOYfPbmCFl21pipFQugDOErn8VZpBjR6AQ1Wyb0kRY+rRwRXgJPvkeamkANNCObpBzA6V2hsdedII35bUbdK7WcaCsrdNQXUi/DUtVpllOqWnTfpJ/hKK3JSlzbsH1wL2UdUHGH/kGUYdtWPJeOXg826DwSeNqZup+WJ8omauBNI5ivGtpzCld5vtNmRnS5fqvGKsjnki+4KMR5pMTTbRs4hU0cXsnwgTONJInY6AyLx/MqfU5qtH2gDuSC3XXiNKEZkxnEO+Nh+cJlqUQN/EXWLh+coHvQhmwFHHNa1vbrWF/S7g4X9Ec7Cqhr7hVJCfWM0xutmKFiAidOtUJb2Oo/HlUdns8x5KY87CQRrFwPvOxytuOQY118S+Sdn+ciyHkDiyx6FD+x2VOlybTikmKYjLczdvAVWNUOEk6lWJU7L9GJRBHOETkKHeyT7B9hKwhlbPXUOJG4udhVmLU4CzKUZr5wTx9uKysziBOf9lX16UNLQkv3NIoomVGxndN5kAnvEip8tPPgtluYK6aSE+iw/uCd2D97VT4QyXS39Wl5aXEc2FaAr8t9GSQ9atHTc0E/Ij20wewHEnv71vQM21ZJyGCi9E+vqd96N+1ZGvA/XmQHCe+xmdoMVOgkHgMbsbXLdMATGACE6tpaJRdYRAp2n6aEZJH7inz3GTXZ9u8bq7MUeISlayiF2m8egwY7vqhtN2IJnObfVYsc70rMyEmMoYuFYWJ2ECmynH6kC//dBvhnwW83iEWC2OAPXjaqYV+AJQNW9cAgj+dU3ZCPJAtwfCbM/ustbwEbvm3Fri3/5kVVBZW3/ADq2BKa4a2bsL7fm5HHIYRiaHZBMQYNKEyQJdjFv/GyxRI9FRkdNNPK+IRCVbhwu89k9JWI3CU8Kr/DyjeIN6JZDLpzmYZrglpEvBdXyYqdJtQS5R81xI6m9ul+DPhq8U0My+5RNISDiXAjVjWyGYrDUUpi2GOinOfvUBz30B9zG6qwK6VV/9FnuOLQ6XrAIicGc609JpYTH67Qsh32bxg48wpd6MbNFCI3kYB221CIa60e+Baj/APFL88rF5yjmhOmYVxCW+JIo0f6/IVO9mg4o7pQfnvQCtSzpLlTYqfvATeEYQVVx8NO2E+AhUog= X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2025 09:19:20.3565 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8573c151-5a66-4c4d-d597-08dd54b4521a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000018.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6467 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 8bed13552ab9..65a50f29bd7e 100644 --- a/drivers/crypto/tegra/tegra-se-hash.c +++ b/drivers/crypto/tegra/tegra-se-hash.c @@ -632,13 +632,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)