From nobody Tue Jun 9 00:50:26 2026 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29CC130C145 for ; Sun, 24 May 2026 19:45:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651952; cv=none; b=mzQXHytQkOGUEyEgkijGAMdGWHt1kogUDxQLSNcAz4HlCDfPu8SN4C713cYS+zrRwcshFO0SCJ/e9DrvSF9GslZ/0MOV+kCLQT7heNoT76mqse94GRXEhn2cuquFDAtX3KwbAHXQuCtmfc/qBC+otNCzMtBlAs0wI6+VHiB0xr8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651952; c=relaxed/simple; bh=QOH23cOE5ksNBRXS1I4/u4f1LkCMC6S9hdVW59i/FDo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=D6gsbgm3S6EMN01IytkmKj4epv8LzfokwP86ZR6j2T0ZGzyGWGjvzb+LMNKYM/1wmDc3+SNY31REa0SCLde5Xv2kqy7als5MxS0UAeqKnr7mKXsQDRv49reAMQZMdwEsq8t5v0/f1yxgCrUnNv10yzrD7U0+CzqBmRA2s4JcQgQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ho+vWIYv; arc=none smtp.client-ip=209.85.216.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ho+vWIYv" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-36abfe17c11so704759a91.0 for ; Sun, 24 May 2026 12:45:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779651948; x=1780256748; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ii2qt5Ov08fmFNNaHs2Sw1nWb5YUcmi/e2JrpHiw+2Q=; b=ho+vWIYvwtPXd1i3wOCAo8EwTN4pkJ0Q8SkLWMyr+yFTABtLhq1Mt+3le0hc+XxZwr WPnlWCH/BgajciC9GU97iAuKH5gURVn1KZfYuzsiJRI0NMDeWjW4oN02QnP5f84IaG4o AJ1XkM0DUhWWehyXjacgGarOiOuKDRbdapnLJBMmp0/mrwzj8eFVJNEsw7e/uUHDZuf/ htdPVG+lxbdW8gBddqP8I2K9+Mpfv7lHxtmXZsrQ7RLQutDKuA6eKT3pCuxjMt1uYiOn 8wzk1eOMwijU5U7r8laKIsTn0rBGauER8faMpLS8myZxGYsXgs2lyMOcLUkrxuMjFyR5 b8WA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779651948; x=1780256748; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ii2qt5Ov08fmFNNaHs2Sw1nWb5YUcmi/e2JrpHiw+2Q=; b=jxIHGyJ+oC78weWrjKgHYEZ3KoFLCTsmWwfd46pKTu/GpGebw2LQxTMuMicwFzuTj8 H5eZ9NYVkmk7KaP56zQTmrpgd5uFTxXuXjy3NCOKf2TpW1hT07pxS9Jn+/61c4ttNpc+ RycFOyfA/nl1rwGF/lTei9y9lxBpmc/gmwYzd8N70c4W9F8DIMaMHSQgblW4rfJ/gzMp CiWKUulae9tuBMrInDZFJuKCD5b1ONwRU9h04ZbH4vyWALrbm3yy9b79yHAqfdUnCHTS fne/Jrqs/Hgl4TF882E7hynPCqnlq5UTwIuEwwa0jYIFRxzwXsEFy2nSm0BXKA9GAkBW tOiQ== X-Forwarded-Encrypted: i=1; AFNElJ+x53pRZD7rTn/mUCD/aVXVOh3Nip75eQ6rsnZxbEpX3J/8SQm2M2DdWADZ6vtKSv3Ag4vpWaUWUi1z1RI=@vger.kernel.org X-Gm-Message-State: AOJu0YwbhWiE2/WDZMUOlAhW+iImyD2iS0LFPVxfBrO+7Q3O2eVrC8LP o9vE7p2kRczutXd7dBcf0t99VBZPqhelVJ7fCWpeqn3hmyAwcVO2Lvgc X-Gm-Gg: Acq92OG423Z3uR13IVSXH9DSLX7jUsVEyzryptmMDqz9pzBTpCPCmMt7/SdSpJyfDJp Sjfoudktge9AF+mwgTIc0JtT1+4p3NeKtUAxq6o2rn7VIQ5S9eXM+MQiBeTVrkP8kKX5+NIfi4I vCm76UiywB3MvuJGknRWmgARVdZJoBcGqJtMVL8k/7CDZUPMeYblNUQDw8fr0mKV5k8IyFKH8/i ewhYBR4ITXtvO+7++38LhmTHgiLImqKCMo8yszhvBeJ0O2FnV/P6jNWqOS9+B8du5LCqorJ5zRX o1LjhDGmBKRMgyiQHPr1CAR6IIvpps2wv1IN+3cop9PW++lYskx/8gq0tbgd7g06DK6MrTTMRpe 53GzBeUcF4n66myyE1Wa9Id5Fg6WfO0wWz3koJ8nc1IwSnAcsJuMURV3BZjncNLnY8LtrhVuP57 fnfy19fdhwco6jRttiF7kXZvJy X-Received: by 2002:a17:903:2bcc:b0:2bd:e5d4:dc63 with SMTP id d9443c01a7336-2beb070343emr131259625ad.26.1779651947922; Sun, 24 May 2026 12:45:47 -0700 (PDT) Received: from mincom1 ([125.149.177.227]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb590aa7esm74414485ad.78.2026.05.24.12.45.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 12:45:47 -0700 (PDT) From: Jihong Min To: Herbert Xu , linux-crypto@vger.kernel.org Cc: Christian Marangi , Antoine Tenart , "David S . Miller" , Richard van Schagen , linux-kernel@vger.kernel.org, Benjamin Larsson , Mieczyslaw Nalewaj , Aleksander Jan Bajkowski , Jihong Min Subject: [PATCH 1/6] crypto: eip93: return IRQ request errors from probe Date: Mon, 25 May 2026 04:45:23 +0900 Message-ID: <20260524194528.3666383-2-hurryman2212@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260524194528.3666383-1-hurryman2212@gmail.com> References: <20260524194528.3666383-1-hurryman2212@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" devm_request_threaded_irq() can fail, but eip93_crypto_probe() continues as if the interrupt handler was installed. Return the error immediately so the driver does not register algorithms for a device that cannot signal completions. Fixes: 9739f5f93b78 ("crypto: eip93 - Add Inside Secure SafeXcel EIP-93 cry= pto engine support") Originally-by: Mieczyslaw Nalewaj Assisted-by: Codex:gpt-5.5 Signed-off-by: Jihong Min --- drivers/crypto/inside-secure/eip93/eip93-main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/crypto/inside-secure/eip93/eip93-main.c b/drivers/cryp= to/inside-secure/eip93/eip93-main.c index 7dccfdeb7b11..276839e1a515 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-main.c +++ b/drivers/crypto/inside-secure/eip93/eip93-main.c @@ -433,6 +433,8 @@ static int eip93_crypto_probe(struct platform_device *p= dev) ret =3D devm_request_threaded_irq(eip93->dev, eip93->irq, eip93_irq_handl= er, NULL, IRQF_ONESHOT, dev_name(eip93->dev), eip93); + if (ret) + return ret; =20 eip93->ring =3D devm_kcalloc(eip93->dev, 1, sizeof(*eip93->ring), GFP_KER= NEL); if (!eip93->ring) --=20 2.53.0 From nobody Tue Jun 9 00:50:26 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1063431D757 for ; Sun, 24 May 2026 19:45:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651954; cv=none; b=m2ERGX13wE+jIwET1KO7RV4wU0Bgol0zE0nrvWF2lqOlzBG5T7pWg70ncKKxzMtYaYmS0CLqqn2r7oIh2wky4x7t3JwsDfqc3GXMK2QVrcxH1gP8viwz+zgs6hIC93yj7OOPq/DQ5sCCcmDHhgoCk4xo23yRXZOAOvj0xOJH2pk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651954; c=relaxed/simple; bh=4qw6UdagDB5Rg+pUwsg3VZ0z5i6gd9nT+MgXaEkbUrw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hUZEpwhhnrVwCS+NffIgGcgj8uiOK8I7wIuIIGP/nJ0T426LzRdXuGVb14L6cPEnyl/qN9JZJCDE72BSKEFU/a9bJ9dHRH/87S43dmqPSmPM2j/t2qOlPLF9QUxVsLQbi5aAwvWQyHqtfspBS+dh6qb+m7UMoqjc8+vYl7AEahs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Yzlo5mW+; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Yzlo5mW+" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2ba17c8cfacso94296435ad.2 for ; Sun, 24 May 2026 12:45:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779651951; x=1780256751; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=upvkT7BOTIVikHvpyUtlt+ZS5mn49ZMriQt2QIdU8EA=; b=Yzlo5mW+5FH8BD+LFnmSvrr6xDozUmMaBGTGvOcmbYFZbgRJiB1ZEtXeIe2SG+eQra ZQ0QgExWkbOtQcS8BeANEc2fRFnhT7bJ+lnlQ/Ez5uC98GXPFjxk+ED2euva9QDzIjD7 psd7Z0axbudpetd4WIjdXGzfyXlnFwqFWj5XdHwnNvXjabz7j3sJSpbfVZCcg7PQt1Yf 8pFxhJvw0jGoSXCAX8mzlTV13FbcS9/1SAcv/f7zr0Br9nYKJkrraIeKANbcFgWFuUDd F1uUkGZSPbknCgG+wb8KX/5EAXIxiUq4Ea4yPDkK1qBmKyfU0vNUgjmcI8TsG6K8iTvO VAYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779651951; x=1780256751; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=upvkT7BOTIVikHvpyUtlt+ZS5mn49ZMriQt2QIdU8EA=; b=Oro3u+Ou0cEydrCt4ElhArW6fe/Fpz8qqc72wXTKS7CaaudJuGnxIWDHBlBPUKgG0a tACNrkO4R7iFSKYzeG4gwZ88teTaUjDbwsbqs+DZfRSFHoguWev/TVBIYvnzhTbvHCYi 2kT9KMvC/qvC4ayvCWq5zr+h0Q3QIEGMhkgWTst2/ou4txv6Rv7cYO5yKu76J1PDPPa0 +QExdqpna6kMWD88pu8hJjp8wldtWQgRy7hOovvYuKxcaXthXN1lVXPgL2BCzLAwbUIB /UXhpzjppong7C0h0w+DW/EUd1R0adDhXOpylLkXPTO0zzCXB85DYzs20MMYfU8B5PsX WLhw== X-Forwarded-Encrypted: i=1; AFNElJ9mgG4yXUPxItGKGNjUVUgEn/3h5Wwzl6a2PcaqGxlJPBHhzyLys1KxZXsGEIF8RKEH6ogF5aOfaWmzvF4=@vger.kernel.org X-Gm-Message-State: AOJu0YwNVYtHWrf+OygHi0c3y0W+6WAcpYNuV3p0A2Tu8LRGCL3SYXAO kAquanQ+oogZdnz569bUHfU93B/NBDrDtd3RHn5QDMI6ScZbM6CF2e8T X-Gm-Gg: Acq92OEG2ato0FmOFhvDdUb/1hJ+bfizoyjz7mmhdNXtFDS0SLM5L4tQBVp1ib3m0Uv gD0cBB+pQbnSuvR52BkTGc90NuIr+Fz9AP29XS/Ox/Dj9TUz/Ja7GUfKjLaPsiKAtWrQwcV+bwq SKYbB22JRctWlMDIgGOOhpVW80ndbOdBS0x0v0aMIrN/RtA+G81IXjB9Kat+d4/mh3mUOnvepzN lHsHCIPiMtO8MAXGhrTMQ1Jzoy8O+KdDJ4d5sY4H6hd0KGqq27eLu+0VexoTxJz2PuC/ip/iRC8 KlHuYwGKfZ4obBcQX+dpLLatYFfnssQnHHSOZpsQvBDVCGGlzcWZvDUlhI6BCTNJ9r/X9+MRZpb d81nULcSsCHgqgWx+SQNkom5F3gpieRfs39x6cnuDZMWfVW/SzBGACfThYKpKoFATP9QhdUfiBE 7jmNtJyK8pIIGUsOnCtVi+TSHx X-Received: by 2002:a17:903:440f:b0:2b0:67a7:5c4b with SMTP id d9443c01a7336-2beb0603fbemr127850575ad.28.1779651950934; Sun, 24 May 2026 12:45:50 -0700 (PDT) Received: from mincom1 ([125.149.177.227]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb590aa7esm74414485ad.78.2026.05.24.12.45.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 12:45:50 -0700 (PDT) From: Jihong Min To: Herbert Xu , linux-crypto@vger.kernel.org Cc: Christian Marangi , Antoine Tenart , "David S . Miller" , Richard van Schagen , linux-kernel@vger.kernel.org, Benjamin Larsson , Mieczyslaw Nalewaj , Aleksander Jan Bajkowski , Jihong Min Subject: [PATCH 2/6] crypto: eip93: guard DMA cleanup on uninitialized mappings Date: Mon, 25 May 2026 04:45:24 +0900 Message-ID: <20260524194528.3666383-3-hurryman2212@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260524194528.3666383-1-hurryman2212@gmail.com> References: <20260524194528.3666383-1-hurryman2212@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Several error paths can reach cleanup before all DMA addresses have been initialized or mapped. Initialize request DMA handles and check them before cleanup so the driver does not unmap zero or stale addresses. If mapping the temporary HMAC SA record fails, also release the block data DMA mapping that was already active. Fixes: 9739f5f93b78 ("crypto: eip93 - Add Inside Secure SafeXcel EIP-93 cry= pto engine support") Reported-by: Benjamin Larsson Originally-by: Mieczyslaw Nalewaj Suggested-by: Benjamin Larsson Assisted-by: Codex:gpt-5.5 Signed-off-by: Jihong Min --- .../crypto/inside-secure/eip93/eip93-common.c | 8 ++- .../crypto/inside-secure/eip93/eip93-hash.c | 54 ++++++++++++------- 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/drivers/crypto/inside-secure/eip93/eip93-common.c b/drivers/cr= ypto/inside-secure/eip93/eip93-common.c index 4c163d7281b3..ed46730c36bc 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-common.c +++ b/drivers/crypto/inside-secure/eip93/eip93-common.c @@ -527,6 +527,8 @@ int eip93_send_req(struct crypto_async_request *async, =20 rctx->sa_state_ctr =3D NULL; rctx->sa_state =3D NULL; + rctx->sa_state_ctr_base =3D 0; + rctx->sa_state_base =3D 0; =20 if (IS_ECB(flags)) goto skip_iv; @@ -534,8 +536,10 @@ int eip93_send_req(struct crypto_async_request *async, memcpy(iv, reqiv, rctx->ivsize); =20 rctx->sa_state =3D kzalloc(sizeof(*rctx->sa_state), GFP_KERNEL); - if (!rctx->sa_state) - return -ENOMEM; + if (!rctx->sa_state) { + err =3D -ENOMEM; + goto free_sa_state; + } =20 sa_state =3D rctx->sa_state; =20 diff --git a/drivers/crypto/inside-secure/eip93/eip93-hash.c b/drivers/cryp= to/inside-secure/eip93/eip93-hash.c index 84d3ff2d3836..63bb6c4670cb 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-hash.c +++ b/drivers/crypto/inside-secure/eip93/eip93-hash.c @@ -34,7 +34,7 @@ static void eip93_hash_free_data_blocks(struct ahash_requ= est *req) if (!list_empty(&rctx->blocks)) INIT_LIST_HEAD(&rctx->blocks); =20 - if (rctx->finalize) + if (rctx->finalize && rctx->data_dma) dma_unmap_single(eip93->dev, rctx->data_dma, rctx->data_used, DMA_TO_DEVICE); @@ -47,12 +47,13 @@ static void eip93_hash_free_sa_record(struct ahash_requ= est *req) struct eip93_hash_ctx *ctx =3D crypto_ahash_ctx(ahash); struct eip93_device *eip93 =3D ctx->eip93; =20 - if (IS_HMAC(ctx->flags)) + if (IS_HMAC(ctx->flags) && rctx->sa_record_hmac_base) dma_unmap_single(eip93->dev, rctx->sa_record_hmac_base, sizeof(rctx->sa_record_hmac), DMA_TO_DEVICE); =20 - dma_unmap_single(eip93->dev, rctx->sa_record_base, - sizeof(rctx->sa_record), DMA_TO_DEVICE); + if (rctx->sa_record_base) + dma_unmap_single(eip93->dev, rctx->sa_record_base, + sizeof(rctx->sa_record), DMA_TO_DEVICE); } =20 void eip93_hash_handle_result(struct crypto_async_request *async, int err) @@ -66,8 +67,9 @@ void eip93_hash_handle_result(struct crypto_async_request= *async, int err) struct eip93_device *eip93 =3D ctx->eip93; int i; =20 - dma_unmap_single(eip93->dev, rctx->sa_state_base, - sizeof(*sa_state), DMA_FROM_DEVICE); + if (rctx->sa_state_base) + dma_unmap_single(eip93->dev, rctx->sa_state_base, + sizeof(*sa_state), DMA_FROM_DEVICE); =20 /* * With partial_hash assume SHA256_DIGEST_SIZE buffer is passed. @@ -200,6 +202,10 @@ static void __eip93_hash_init(struct ahash_request *re= q) =20 rctx->len =3D 0; rctx->data_used =3D 0; + rctx->sa_record_base =3D 0; + rctx->sa_state_base =3D 0; + rctx->sa_record_hmac_base =3D 0; + rctx->data_dma =3D 0; rctx->partial_hash =3D false; rctx->finalize =3D false; INIT_LIST_HEAD(&rctx->blocks); @@ -250,8 +256,12 @@ static int eip93_send_hash_req(struct crypto_async_req= uest *async, u8 *data, sizeof(*sa_record_hmac), DMA_TO_DEVICE); ret =3D dma_mapping_error(eip93->dev, rctx->sa_record_hmac_base); - if (ret) + if (ret) { + rctx->sa_record_hmac_base =3D 0; + dma_unmap_single(eip93->dev, src_addr, len, + DMA_TO_DEVICE); return ret; + } =20 cdesc.sa_addr =3D rctx->sa_record_hmac_base; } @@ -420,12 +430,14 @@ static int eip93_hash_update(struct ahash_request *re= q) return ret; =20 free_sa_record: - dma_unmap_single(eip93->dev, rctx->sa_record_base, - sizeof(*sa_record), DMA_TO_DEVICE); + if (rctx->sa_record_base) + dma_unmap_single(eip93->dev, rctx->sa_record_base, + sizeof(*sa_record), DMA_TO_DEVICE); =20 free_sa_state: - dma_unmap_single(eip93->dev, rctx->sa_state_base, - sizeof(*sa_state), DMA_TO_DEVICE); + if (rctx->sa_state_base) + dma_unmap_single(eip93->dev, rctx->sa_state_base, + sizeof(*sa_state), DMA_TO_DEVICE); =20 return ret; } @@ -501,12 +513,14 @@ static int __eip93_hash_final(struct ahash_request *r= eq, bool map_dma) free_blocks: eip93_hash_free_data_blocks(req); =20 - dma_unmap_single(eip93->dev, rctx->sa_record_base, - sizeof(*sa_record), DMA_TO_DEVICE); + if (rctx->sa_record_base) + dma_unmap_single(eip93->dev, rctx->sa_record_base, + sizeof(*sa_record), DMA_TO_DEVICE); =20 free_sa_state: - dma_unmap_single(eip93->dev, rctx->sa_state_base, - sizeof(*sa_state), DMA_TO_DEVICE); + if (rctx->sa_state_base) + dma_unmap_single(eip93->dev, rctx->sa_state_base, + sizeof(*sa_state), DMA_TO_DEVICE); =20 return ret; } @@ -549,11 +563,13 @@ static int eip93_hash_finup(struct ahash_request *req) return __eip93_hash_final(req, false); =20 free_sa_record: - dma_unmap_single(eip93->dev, rctx->sa_record_base, - sizeof(*sa_record), DMA_TO_DEVICE); + if (rctx->sa_record_base) + dma_unmap_single(eip93->dev, rctx->sa_record_base, + sizeof(*sa_record), DMA_TO_DEVICE); free_sa_state: - dma_unmap_single(eip93->dev, rctx->sa_state_base, - sizeof(*sa_state), DMA_TO_DEVICE); + if (rctx->sa_state_base) + dma_unmap_single(eip93->dev, rctx->sa_state_base, + sizeof(*sa_state), DMA_TO_DEVICE); =20 return ret; } --=20 2.53.0 From nobody Tue Jun 9 00:50:26 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8565D314B95 for ; Sun, 24 May 2026 19:45:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651956; cv=none; b=qFZHyTEuUn8EJJWoXOHWDJB4Li7V8wNSU3cBxO8C5Up2ovK2wWSVbrPF+ei/Qr2V2AHu5ZHw7/Zb/9yo1jOogcUECUBpCMA+s0C02jxIG4o51bYcQ/hO3Cb8rUyHw80Pakxwg8vCv1aSSVtyIvaqVSaP83uHMq6jMuvHwK6nj0s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651956; c=relaxed/simple; bh=q26UTZln7vxpVLQUpB2k7H9kOQSzRK3kvbnGt02k2yk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ecmitKv+jMS4+RUDT54AUgzp6OQZpua34D8R6pAv4S0eWHfOtzkM/tAgO9YhJhIGkjT4WytPc01SqLNf4vWK02jDH/HGh5X1sGaYjP4ycvOfgX+TdSLtnwKVql9eEFBwKbx++cPU4VPRURpcORiPESKQ74oKTWaQ6lhUtPphrj8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IV4182/R; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IV4182/R" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2bd2051167eso43058515ad.1 for ; Sun, 24 May 2026 12:45:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779651954; x=1780256754; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=neaNKTc1iKEb7KTL27Z88clko1muflEHCUKBETav0TM=; b=IV4182/RWut+1YEBR+MLLOhF6j9FL1lcX9nS2n4rMpYUnEKWNCii08kYx04B8AqBw9 Nxb9s47iZ393HN3k6xOZevbRxCqHOkf650Wea1Y2dURF4XjjC00bALDYn5yJp3qaFnsO EnN9HqQNrDVKA1NNx+EHlygYYuEj5/eU2/X4a/rlRJ5dvs7IL24CsLKq0S1AxdfLOaFb NxgnyEDqKWSv34TT9csLdG4m30wZE+ZUM57yWSoRrOYTZNqauMcZQXrBE2ZaRlaWGpbl D0PhqbTfOd2yVxOe+XyVX0ExzVnk/QI07q/VRiFUnol5XepagXZCFVoj0TgwNX9O9nbg 7RSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779651954; x=1780256754; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=neaNKTc1iKEb7KTL27Z88clko1muflEHCUKBETav0TM=; b=Gl9SLDaydlptbpqvFeiSgbyKgF9CxVqKYNBh30Y3HrpHM95kbDzyovOOTK83jqdzDe AFft6fqE70kaxUnswYcPdlWSw199gr/eYvDqD1lIFM0fS5KKdAS0sXyX60YfKLr6c9MG g9HZ1pNDIdxlKnO/cO+Z577txecwlrQ/xbid5RA+hrf9THUOasuDbNPk8M3cbGNBY7d9 seMpQyeNYZIw9se/8LMkL+5w2mmW9avpe6/urMfNb1VItCGH7767Y4Sbw4bfQIIoaVW8 k5mlYiwnwlaQMGHu2YknTY7IcHRqu/zz1Ek77Q2VjZ8MnUVBT09L3Pa7BQdEY+qW3xKx LGbw== X-Forwarded-Encrypted: i=1; AFNElJ+MT1qt5ZIUTj87ghsFX5KWoUj+ssO5FLD37rdbjCQZ4F5To2wiQAFjdvhgG6MvVtLI0BSVNnmpA2UH6wU=@vger.kernel.org X-Gm-Message-State: AOJu0YzUgbssQuzZzU+lzKD25JQyDrEGR4p8qU0tGOluwpz+OeKWFwg+ yCIT3H9fTAlLAxzx/3BAVrmwghj9ZIC4VBzxspDSzXvH1iELJYc9aXP/ X-Gm-Gg: Acq92OFJMBlFwpjQFie9FJqOP1YogXhIPwThrrh8+vBFgdsQq2POGoxCcRNWP7P74IZ ez0EWNoL7LqfrfB0NnQHluF9na2VAluPiWhOKQxOcxGoa+UdmvRcg8v5NnPYPMmHfliz4tMXyCm vha3PdDKyyk1cAGr7R9d3d1nDUAgsHZbE8chW6cnnU8Fdwi4aRyNwj1QRHt3qF6KQZYxqilJfGe eoukuj9Ra3LWkfWR7wC9gJqzIdQN+aYsa8b6X6AVMNqgE7/2Jae20G8GRln5wuxMT+qHkf4pfH6 AaUF+IPa28WGrJUUHybNtS3VCCn47wF1zziKPow+CkyZXPm6T2MOILDkqTWGYeDnVAkX/APNwdu i/B1uDe/yzaA2qHD20zjfpNoorquPKoHqghKvp+D5PSJ1X/HjcTLxCTyrEFFyA86CgbqrPsSUEi znyO3Qf1OTTRgHpPpx5vf7T/KY X-Received: by 2002:a17:903:1a70:b0:2bc:d1ec:9f09 with SMTP id d9443c01a7336-2beb06be3d4mr123969875ad.40.1779651953703; Sun, 24 May 2026 12:45:53 -0700 (PDT) Received: from mincom1 ([125.149.177.227]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb590aa7esm74414485ad.78.2026.05.24.12.45.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 12:45:53 -0700 (PDT) From: Jihong Min To: Herbert Xu , linux-crypto@vger.kernel.org Cc: Christian Marangi , Antoine Tenart , "David S . Miller" , Richard van Schagen , linux-kernel@vger.kernel.org, Benjamin Larsson , Mieczyslaw Nalewaj , Aleksander Jan Bajkowski , Jihong Min Subject: [PATCH 3/6] crypto: eip93: reject HMAC requests before setkey Date: Mon, 25 May 2026 04:45:25 +0900 Message-ID: <20260524194528.3666383-4-hurryman2212@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260524194528.3666383-1-hurryman2212@gmail.com> References: <20260524194528.3666383-1-hurryman2212@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" HMAC requests need the precomputed ipad/opad state installed by setkey(). Using an HMAC tfm before setkey() initializes the request with an all-zero ipad and produces invalid hardware input. Reject those requests during hash init so the failure is explicit. Fixes: 9739f5f93b78 ("crypto: eip93 - Add Inside Secure SafeXcel EIP-93 cry= pto engine support") Originally-by: Mieczyslaw Nalewaj Assisted-by: Codex:gpt-5.5 Signed-off-by: Jihong Min --- drivers/crypto/inside-secure/eip93/eip93-hash.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/crypto/inside-secure/eip93/eip93-hash.c b/drivers/cryp= to/inside-secure/eip93/eip93-hash.c index 63bb6c4670cb..060e90c5eaa7 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-hash.c +++ b/drivers/crypto/inside-secure/eip93/eip93-hash.c @@ -300,6 +300,9 @@ static int eip93_hash_init(struct ahash_request *req) struct eip93_hash_ctx *ctx =3D crypto_ahash_ctx(ahash); struct sa_state *sa_state =3D &rctx->sa_state; =20 + if (IS_HMAC(ctx->flags) && !memchr_inv(ctx->ipad, 0, SHA256_BLOCK_SIZE)) + return -EINVAL; + memset(sa_state->state_byte_cnt, 0, sizeof(u32) * 2); eip93_hash_init_sa_state_digest(ctx->flags & EIP93_HASH_MASK, sa_state->state_i_digest); --=20 2.53.0 From nobody Tue Jun 9 00:50:26 2026 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22BF331280C for ; Sun, 24 May 2026 19:45:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651960; cv=none; b=p36AnrfjX7XMUfwBe1YALfBzSSS7P1xVnL5qwZhhWOpDMTGAc/a785kBgN+rsvmVRCkt19+CeDOOnK7tFnU83tlEO2NQ/84Z8gO03bv76BAX7lRKfUFHQhsZ9J4n6LDFKI1cfMxBNMFJlAkUIyLp8c0TvEt5q4qE+pKREE3i5iQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651960; c=relaxed/simple; bh=h2bNyzFdRhty2nZBrRF7qZ99bpFdoiEGoomTOEdSM/s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V3vjBxBvwOpO0Lo5o62qjn/+AiXDhyV9aFB5ZXQKbmoDOwR2ilmb5FKdxFhp+NzzxFKHwwosaSYD5qvWzs386z5WMo7EBqK9z1YyHepgS8UqXJNbmZk8/p7vwRN6NYl5HBB3NrxLpMbf8AESPCHubnP26fnU15EmHaYc6DLJWmA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=I6K5IPpJ; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="I6K5IPpJ" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2bab82d75fdso44477645ad.2 for ; Sun, 24 May 2026 12:45:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779651956; x=1780256756; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KpsRsu/Sc6+h9vss+51m0IGJ1DAMRL92j7czA/gNDuY=; b=I6K5IPpJDrWSCgK005NN6V/7R0AUCghRqAhyPqGVm+jqweXxQjeNieMhzntaQ7siC9 4sJZtre1XVOWC/sA58XmglhljLFdTqO8wmzueytW+zKpgDQrLjJXw2KkIux0Drq1MgDO raSS1nAspTUaIIEKxOPBJTHHTzV2glWnPUUXM1tXNRbPemw2wVWLykUB3UUMErYh9inH PQOlJquCAK0jp/CnL4EZlrc/U2iLxuN4DMinjzr4Wti2eKdR4z2U6zDvRJ2dIToA8CW6 aVfIZXVPVEsFH1p+XSecVGF9rT7X6gOC0HXqXpjZWSH4JQLVLKdY3pyGmkW8ykgfSFya q4qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779651956; x=1780256756; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=KpsRsu/Sc6+h9vss+51m0IGJ1DAMRL92j7czA/gNDuY=; b=iGGbPvzM3LIKoVG+EW47FHRs4aUgcF+1BXeTeiK5mxkdkqSlhSbkd9myc9blGiQvn9 0pwhOI+0O7/OCTLghHq8O//vca29NR+OagyTj3HqE3wB4jaCY9jQmx/I9oMhUwa1yGFY 5+bRgBxQ/lim70CwfouIkeWoIX/v+rwVTxvY0V/KSKdlJTlFyFO/NUO8NuaNHSP9pfTr hLbFEWd9WqDCQ0rUJBi90Rb4wpoCe0DT0txAaaYPVQ/3lnPrcSbM+IOCONUKeHOs1qWC 3evd9JDkkltwh55QddrRMcHSkBqg9ZU92mrYcciSrdYnf/e0KslcrVzxEGBwbOtnb05A OWpg== X-Forwarded-Encrypted: i=1; AFNElJ+wkKVHvjhh+M4OmR9E6zIWg8uUAi1M8NzbJJUAKpgCnDKhEKWE7KQRUSzMzXX8vvJOkKfMn7c8suE9Aec=@vger.kernel.org X-Gm-Message-State: AOJu0YzQ5sKbMtVROd5bIpuC5f8oAKhfxEMlOM09c3eQNP4IIIyFHePo 4yExPHyGuxVSonM6Tzqyc+Ij8KpZtItIRbrFs1gsiGjUTDSyDMgsRuxbWqBRwxG1 X-Gm-Gg: Acq92OHdguTZJpj6aK5m5PtBiS9LhPecs34n9MkqQMc16b5sU2P09uEp4JMEb7WPPAZ NT6ZsO5wJB7hNR4Imq+amiC6wGyNBEUSDnvDU9wk1X8C/Ec5QvwiOA0YQkpubwy2ltsizp1inAG WiFiHOz0iSleV0dcjIENZ2lVaENiTDnfee0UnQR/wHgj6s3TuRAyqGrsKe6mQmOrfXls3a38kKz tFG8x0VHZCSHF7ObDtv1taq6r3rn7iv/9O9Bun/aIapQFursFkIcLp0deJMbEL9R/wu91eGSScC Fi2afqjEbJ2BprS/dgfjrIQUgj+jsOeOwMVk4MdJjFjwJf0PolXFggSUh1a+BV+rAPxFgMSY+pH PLt+O9vP49DlgBZ+5Usxb6mpb0TtEPVnv8CGeM4JxIPty7ldLGBk7mjOCsW8N8mEDsamcqf4Fbu jaariSpOMGxFHQoQ2RjKF0MHSv X-Received: by 2002:a17:903:17cc:b0:2b9:cd2d:6f13 with SMTP id d9443c01a7336-2beb0722d9amr133393165ad.10.1779651956545; Sun, 24 May 2026 12:45:56 -0700 (PDT) Received: from mincom1 ([125.149.177.227]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb590aa7esm74414485ad.78.2026.05.24.12.45.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 12:45:56 -0700 (PDT) From: Jihong Min To: Herbert Xu , linux-crypto@vger.kernel.org Cc: Christian Marangi , Antoine Tenart , "David S . Miller" , Richard van Schagen , linux-kernel@vger.kernel.org, Benjamin Larsson , Mieczyslaw Nalewaj , Aleksander Jan Bajkowski , Jihong Min Subject: [PATCH 4/6] crypto: eip93: use request-local SA records for cipher requests Date: Mon, 25 May 2026 04:45:26 +0900 Message-ID: <20260524194528.3666383-5-hurryman2212@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260524194528.3666383-1-hurryman2212@gmail.com> References: <20260524194528.3666383-1-hurryman2212@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Cipher and AEAD requests keep mutable direction and copy flags in the SA record. Updating the tfm-level SA record for decrypt requests can leak those settings into concurrent requests using the same transform. Copy the prepared SA record into the request context and apply the request-specific flags there. Map that request-local record for DMA, then unmap it on normal completion and validation failures. Fixes: 9739f5f93b78 ("crypto: eip93 - Add Inside Secure SafeXcel EIP-93 cry= pto engine support") Reported-by: Benjamin Larsson Suggested-by: Benjamin Larsson Assisted-by: Codex:gpt-5.5 Signed-off-by: Jihong Min --- .../crypto/inside-secure/eip93/eip93-aead.c | 34 +++++++++++++------ .../crypto/inside-secure/eip93/eip93-cipher.c | 34 ++++++++++++------- .../crypto/inside-secure/eip93/eip93-cipher.h | 3 +- .../crypto/inside-secure/eip93/eip93-common.c | 9 +++++ 4 files changed, 55 insertions(+), 25 deletions(-) diff --git a/drivers/crypto/inside-secure/eip93/eip93-aead.c b/drivers/cryp= to/inside-secure/eip93/eip93-aead.c index 2bbd0af7b0e0..3b2edb012048 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-aead.c +++ b/drivers/crypto/inside-secure/eip93/eip93-aead.c @@ -42,12 +42,18 @@ void eip93_aead_handle_result(struct crypto_async_reque= st *async, int err) =20 static int eip93_aead_send_req(struct crypto_async_request *async) { + struct eip93_crypto_ctx *ctx =3D crypto_tfm_ctx(async->tfm); struct aead_request *req =3D aead_request_cast(async); struct eip93_cipher_reqctx *rctx =3D aead_request_ctx(req); int err; =20 err =3D check_valid_request(rctx); if (err) { + if (rctx->sa_record_base) { + dma_unmap_single(ctx->eip93->dev, rctx->sa_record_base, + sizeof(rctx->sa_record), DMA_TO_DEVICE); + rctx->sa_record_base =3D 0; + } aead_request_complete(req, err); return err; } @@ -81,8 +87,6 @@ static void eip93_aead_cra_exit(struct crypto_tfm *tfm) { struct eip93_crypto_ctx *ctx =3D crypto_tfm_ctx(tfm); =20 - dma_unmap_single(ctx->eip93->dev, ctx->sa_record_base, - sizeof(*ctx->sa_record), DMA_TO_DEVICE); kfree(ctx->sa_record); } =20 @@ -191,11 +195,24 @@ static int eip93_aead_crypt(struct aead_request *req) struct crypto_aead *aead =3D crypto_aead_reqtfm(req); int ret; =20 - ctx->sa_record_base =3D dma_map_single(ctx->eip93->dev, ctx->sa_record, - sizeof(*ctx->sa_record), DMA_TO_DEVICE); - ret =3D dma_mapping_error(ctx->eip93->dev, ctx->sa_record_base); - if (ret) + memcpy(&rctx->sa_record, ctx->sa_record, sizeof(rctx->sa_record)); + if (IS_DECRYPT(rctx->flags)) { + rctx->sa_record.sa_cmd0_word |=3D EIP93_SA_CMD_DIRECTION_IN; + rctx->sa_record.sa_cmd1_word &=3D ~(EIP93_SA_CMD_COPY_PAD | + EIP93_SA_CMD_COPY_DIGEST); + } else { + rctx->sa_record.sa_cmd0_word &=3D ~EIP93_SA_CMD_DIRECTION_IN; + rctx->sa_record.sa_cmd1_word |=3D EIP93_SA_CMD_COPY_PAD | + EIP93_SA_CMD_COPY_DIGEST; + } + + rctx->sa_record_base =3D dma_map_single(ctx->eip93->dev, &rctx->sa_record, + sizeof(rctx->sa_record), DMA_TO_DEVICE); + ret =3D dma_mapping_error(ctx->eip93->dev, rctx->sa_record_base); + if (ret) { + rctx->sa_record_base =3D 0; return ret; + } =20 rctx->textsize =3D req->cryptlen; rctx->blksize =3D ctx->blksize; @@ -205,7 +222,6 @@ static int eip93_aead_crypt(struct aead_request *req) rctx->sg_dst =3D req->dst; rctx->ivsize =3D crypto_aead_ivsize(aead); rctx->desc_flags =3D EIP93_DESC_AEAD; - rctx->sa_record_base =3D ctx->sa_record_base; =20 if (IS_DECRYPT(rctx->flags)) rctx->textsize -=3D rctx->authsize; @@ -238,10 +254,6 @@ static int eip93_aead_decrypt(struct aead_request *req) struct eip93_crypto_ctx *ctx =3D crypto_tfm_ctx(req->base.tfm); struct eip93_cipher_reqctx *rctx =3D aead_request_ctx(req); =20 - ctx->sa_record->sa_cmd0_word |=3D EIP93_SA_CMD_DIRECTION_IN; - ctx->sa_record->sa_cmd1_word &=3D ~(EIP93_SA_CMD_COPY_PAD | - EIP93_SA_CMD_COPY_DIGEST); - rctx->flags =3D ctx->flags; rctx->flags |=3D EIP93_DECRYPT; if (ctx->set_assoc) { diff --git a/drivers/crypto/inside-secure/eip93/eip93-cipher.c b/drivers/cr= ypto/inside-secure/eip93/eip93-cipher.c index 4dd7ab7503e8..66b85781ef93 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-cipher.c +++ b/drivers/crypto/inside-secure/eip93/eip93-cipher.c @@ -32,6 +32,7 @@ void eip93_skcipher_handle_result(struct crypto_async_req= uest *async, int err) =20 static int eip93_skcipher_send_req(struct crypto_async_request *async) { + struct eip93_crypto_ctx *ctx =3D crypto_tfm_ctx(async->tfm); struct skcipher_request *req =3D skcipher_request_cast(async); struct eip93_cipher_reqctx *rctx =3D skcipher_request_ctx(req); int err; @@ -39,6 +40,11 @@ static int eip93_skcipher_send_req(struct crypto_async_r= equest *async) err =3D check_valid_request(rctx); =20 if (err) { + if (rctx->sa_record_base) { + dma_unmap_single(ctx->eip93->dev, rctx->sa_record_base, + sizeof(rctx->sa_record), DMA_TO_DEVICE); + rctx->sa_record_base =3D 0; + } skcipher_request_complete(req, err); return err; } @@ -72,8 +78,6 @@ static void eip93_skcipher_cra_exit(struct crypto_tfm *tf= m) { struct eip93_crypto_ctx *ctx =3D crypto_tfm_ctx(tfm); =20 - dma_unmap_single(ctx->eip93->dev, ctx->sa_record_base, - sizeof(*ctx->sa_record), DMA_TO_DEVICE); kfree(ctx->sa_record); } =20 @@ -133,7 +137,7 @@ static int eip93_skcipher_setkey(struct crypto_skcipher= *ctfm, const u8 *key, return 0; } =20 -static int eip93_skcipher_crypt(struct skcipher_request *req) +static int eip93_skcipher_crypt(struct skcipher_request *req, bool encrypt) { struct eip93_cipher_reqctx *rctx =3D skcipher_request_ctx(req); struct crypto_async_request *async =3D &req->base; @@ -153,11 +157,19 @@ static int eip93_skcipher_crypt(struct skcipher_reque= st *req) crypto_skcipher_blocksize(skcipher))) return -EINVAL; =20 - ctx->sa_record_base =3D dma_map_single(ctx->eip93->dev, ctx->sa_record, - sizeof(*ctx->sa_record), DMA_TO_DEVICE); - ret =3D dma_mapping_error(ctx->eip93->dev, ctx->sa_record_base); - if (ret) + memcpy(&rctx->sa_record, ctx->sa_record, sizeof(rctx->sa_record)); + if (encrypt) + rctx->sa_record.sa_cmd0_word &=3D ~EIP93_SA_CMD_DIRECTION_IN; + else + rctx->sa_record.sa_cmd0_word |=3D EIP93_SA_CMD_DIRECTION_IN; + + rctx->sa_record_base =3D dma_map_single(ctx->eip93->dev, &rctx->sa_record, + sizeof(rctx->sa_record), DMA_TO_DEVICE); + ret =3D dma_mapping_error(ctx->eip93->dev, rctx->sa_record_base); + if (ret) { + rctx->sa_record_base =3D 0; return ret; + } =20 rctx->assoclen =3D 0; rctx->textsize =3D req->cryptlen; @@ -167,7 +179,6 @@ static int eip93_skcipher_crypt(struct skcipher_request= *req) rctx->ivsize =3D crypto_skcipher_ivsize(skcipher); rctx->blksize =3D ctx->blksize; rctx->desc_flags =3D EIP93_DESC_SKCIPHER; - rctx->sa_record_base =3D ctx->sa_record_base; =20 return eip93_skcipher_send_req(async); } @@ -181,22 +192,19 @@ static int eip93_skcipher_encrypt(struct skcipher_req= uest *req) rctx->flags =3D tmpl->flags; rctx->flags |=3D EIP93_ENCRYPT; =20 - return eip93_skcipher_crypt(req); + return eip93_skcipher_crypt(req, true); } =20 static int eip93_skcipher_decrypt(struct skcipher_request *req) { - struct eip93_crypto_ctx *ctx =3D crypto_tfm_ctx(req->base.tfm); struct eip93_cipher_reqctx *rctx =3D skcipher_request_ctx(req); struct eip93_alg_template *tmpl =3D container_of(req->base.tfm->__crt_alg, struct eip93_alg_template, alg.skcipher.base); =20 - ctx->sa_record->sa_cmd0_word |=3D EIP93_SA_CMD_DIRECTION_IN; - rctx->flags =3D tmpl->flags; rctx->flags |=3D EIP93_DECRYPT; =20 - return eip93_skcipher_crypt(req); + return eip93_skcipher_crypt(req, false); } =20 /* Available algorithms in this module */ diff --git a/drivers/crypto/inside-secure/eip93/eip93-cipher.h b/drivers/cr= ypto/inside-secure/eip93/eip93-cipher.h index 47e4e84ff14e..e9612696c388 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-cipher.h +++ b/drivers/crypto/inside-secure/eip93/eip93-cipher.h @@ -9,6 +9,7 @@ #define _EIP93_CIPHER_H_ =20 #include "eip93-main.h" +#include "eip93-regs.h" =20 struct eip93_crypto_ctx { struct eip93_device *eip93; @@ -16,7 +17,6 @@ struct eip93_crypto_ctx { struct sa_record *sa_record; u32 sa_nonce; int blksize; - dma_addr_t sa_record_base; /* AEAD specific */ unsigned int authsize; unsigned int assoclen; @@ -32,6 +32,7 @@ struct eip93_cipher_reqctx { unsigned int textsize; unsigned int assoclen; unsigned int authsize; + struct sa_record sa_record __aligned(CRYPTO_DMA_ALIGN); dma_addr_t sa_record_base; struct sa_state *sa_state; dma_addr_t sa_state_base; diff --git a/drivers/crypto/inside-secure/eip93/eip93-common.c b/drivers/cr= ypto/inside-secure/eip93/eip93-common.c index ed46730c36bc..f422c93748c9 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-common.c +++ b/drivers/crypto/inside-secure/eip93/eip93-common.c @@ -637,6 +637,10 @@ int eip93_send_req(struct crypto_async_request *async, DMA_TO_DEVICE); free_sa_state: kfree(rctx->sa_state); + if (rctx->sa_record_base) + dma_unmap_single(eip93->dev, rctx->sa_record_base, + sizeof(rctx->sa_record), DMA_TO_DEVICE); + rctx->sa_record_base =3D 0; =20 return err; } @@ -693,6 +697,11 @@ void eip93_handle_result(struct eip93_device *eip93, s= truct eip93_cipher_reqctx sizeof(*rctx->sa_state_ctr), DMA_FROM_DEVICE); =20 + if (rctx->sa_record_base) + dma_unmap_single(eip93->dev, rctx->sa_record_base, + sizeof(rctx->sa_record), DMA_TO_DEVICE); + rctx->sa_record_base =3D 0; + if (rctx->sa_state) dma_unmap_single(eip93->dev, rctx->sa_state_base, sizeof(*rctx->sa_state), --=20 2.53.0 From nobody Tue Jun 9 00:50:26 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7EDB0212566 for ; Sun, 24 May 2026 19:46:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651961; cv=none; b=J9YJ1F8jmyn/YdLSsYaSuRnlrP0ejB8IQPeJ6vFLmoV+8OzadWFFnlhBgGg57fEEjDd+2vdF0ZSjJ6npGCEaxwUGFPvg1q+jmI70vt7lDoHURfR/2GkxR+yFeF+etPRm6wcWLPpiO34wW0Ly6EGn2z9f0hXGJmlT5XCz1s+tQqQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651961; c=relaxed/simple; bh=IxzE01Z6z/9URguM4aBzxWHBPb8eJreZXthAH0xGgX4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C1f72uHvhLT/xS02PEnjc+bWG+LYOJHcWk2LoFg3wbEz0nz9lGpfO5iWEtzIHqH2+TXb/QjCMc8xhZCz2gdQJh6OObNxp09G6I/jQeBW/c8J6BekvbibS7v4BGisjHlNGnM1von4F5b5ANDXXs8ecPofm51FznBCghMDlD2YAmI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AHKs6AUU; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AHKs6AUU" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2bea7176c72so27047495ad.0 for ; Sun, 24 May 2026 12:46:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779651959; x=1780256759; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ngfJ4S0HLLbnVGnzJRGuSetDpPWqvEm8s3fR6sruCTU=; b=AHKs6AUUDC+VFhe5coMchPTk1YoeLLVuH0cc8QZ2eZEpeHeBYEd+zeRSyJCqT4SW7f N2H6f8ZruCH/a7pD7yBBH9/cCSepMwkuG2I562reIRrNKNsS5akvQkI0uTZLFoyFJQfY Jpnu375HU+zK3l4ZYsM8gNnHckS+IKeSQYPVByaBike5ebnYvRDqTPrn07TjjfQYwEt2 R3sP1vXGGWJISRzmXmVaVPoj/mF4Nnmdx5BjA93+IOybdCTwtvZOKZB02jz8z/u6At/x xXEH2yJsfqtl3I1n23yWqclmXiVMqRs9Sv3qj2CA4i+LjUnkNZQR+VDGXyfJRWZsVHfG oclA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779651959; x=1780256759; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ngfJ4S0HLLbnVGnzJRGuSetDpPWqvEm8s3fR6sruCTU=; b=X5XdKWGQHbLvpDQifDwBPxIBbG0qj5gN4HjmwesLvIGkiiv77toi0eiq3BH/H+nmwf GnHwmmL7SysEyMIw8/Fpml5nbSkVtl3BuOQFK1eU2h3ailzL0zvPANw/ZRC0gUvMSkzI lPZuwZJQc8uWz2C1zc4uxS8U1qfuDbgSVvHwQhD0zFx4DrOMHc5vb3OuX0Fz+uD1nyCh BWZme/9h7pPol8aUiL+odL0yRf/5fsqRjISyRmL1QnHKE0g7VGv84x73EOYhoh5JjKAq j6WNLBHl/m0wvMfmsIcjHC8ALPL/CB2NnFxDZk7fFskVbjdVJI3CwR/W9X22NW4Ui4DG N4UA== X-Forwarded-Encrypted: i=1; AFNElJ889tgTF7gB6n2O3oj0VhxNBwsbUY9u+Cuz44L/ZJ24uLqADONieMGPkb+jBI7Xht0mgDbr5FcOB056s6o=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5jfoq95GN8j40NY1HE8BT8MVZU9zaGnTzzDl+/7+hcGpGDJBZ a9nISUzDUtD4SZRulEbZjzuRxhoB34eD+GKlwQT2ohoYymRCiRtjpPl5 X-Gm-Gg: Acq92OGpr0Xkbv0KYuFnhso9IFvlQfX/1QcDosYJ3jK1LdZ7o0E/f9j9wOB8UdL7pOF 1mn/7szYJf9OCVbaty4FlSEHAE2XmgGVgMattaXBdsQ4LbsZfy/qkNrQjEc3IZwpenAxcfuJhj+ D3uFf/ZiWAJnuuBzEd5lgACd/c4vnqp+eRdNQL1MEQmIhPeKjlF1E/6d/QgdBTxw9b60tyMPbUo YvH2mTvyYr13PJhQBA7Ti7qvuq7f41qtJFrAJ2RirNTd8OhG/ClfhDsQ++m285ukzpPyXVkgRAi DAMIwYMa7bKhpFgBZwrmvPIS4AOlBg7Cafc5W3Bn0gnO9Onwy9hrLPGi6d+kD0a6ZsggtLiYpne 6gphlUb82m8OxBDH49bezLH5otA98YcJn8p2n6cfwF0Uxpsnodv2xRr3IymgcA9mUXIEe80SoqC YA0Hu23k/hXpd8gDE2z5q7CQFG X-Received: by 2002:a17:903:24c:b0:2bd:9067:58f with SMTP id d9443c01a7336-2beb067480emr125078795ad.22.1779651959544; Sun, 24 May 2026 12:45:59 -0700 (PDT) Received: from mincom1 ([125.149.177.227]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb590aa7esm74414485ad.78.2026.05.24.12.45.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 12:45:58 -0700 (PDT) From: Jihong Min To: Herbert Xu , linux-crypto@vger.kernel.org Cc: Christian Marangi , Antoine Tenart , "David S . Miller" , Richard van Schagen , linux-kernel@vger.kernel.org, Benjamin Larsson , Mieczyslaw Nalewaj , Aleksander Jan Bajkowski , Jihong Min Subject: [PATCH 5/6] crypto: eip93: order result descriptor reads after PE_READY Date: Mon, 25 May 2026 04:45:27 +0900 Message-ID: <20260524194528.3666383-6-hurryman2212@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260524194528.3666383-1-hurryman2212@gmail.com> References: <20260524194528.3666383-1-hurryman2212@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The result handler polls ownership bits until the packet engine reports the descriptor as ready. Ensure later descriptor reads observe the DMA writes that completed before PE_READY became visible. Use the value already read from the descriptor for error parsing. Fixes: 9739f5f93b78 ("crypto: eip93 - Add Inside Secure SafeXcel EIP-93 cry= pto engine support") Reported-by: Benjamin Larsson Suggested-by: Benjamin Larsson Assisted-by: Codex:gpt-5.5 Signed-off-by: Jihong Min --- drivers/crypto/inside-secure/eip93/eip93-main.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/inside-secure/eip93/eip93-main.c b/drivers/cryp= to/inside-secure/eip93/eip93-main.c index 276839e1a515..e3bd28cc0c67 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-main.c +++ b/drivers/crypto/inside-secure/eip93/eip93-main.c @@ -224,11 +224,14 @@ static void eip93_handle_result_descriptor(struct eip= 93_device *eip93) FIELD_GET(EIP93_PE_LENGTH_HOST_PE_READY, pe_length) !=3D EIP93_PE_LENGTH_PE_READY); =20 - err =3D rdesc->pe_ctrl_stat_word & (EIP93_PE_CTRL_PE_EXT_ERR_CODE | - EIP93_PE_CTRL_PE_EXT_ERR | - EIP93_PE_CTRL_PE_SEQNUM_ERR | - EIP93_PE_CTRL_PE_PAD_ERR | - EIP93_PE_CTRL_PE_AUTH_ERR); + /* Order descriptor reads after device ownership is returned. */ + dma_rmb(); + + err =3D pe_ctrl_stat & (EIP93_PE_CTRL_PE_EXT_ERR_CODE | + EIP93_PE_CTRL_PE_EXT_ERR | + EIP93_PE_CTRL_PE_SEQNUM_ERR | + EIP93_PE_CTRL_PE_PAD_ERR | + EIP93_PE_CTRL_PE_AUTH_ERR); =20 desc_flags =3D FIELD_GET(EIP93_PE_USER_ID_DESC_FLAGS, rdesc->user_id); crypto_idr =3D FIELD_GET(EIP93_PE_USER_ID_CRYPTO_IDR, rdesc->user_id); --=20 2.53.0 From nobody Tue Jun 9 00:50:26 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1990A31717B for ; Sun, 24 May 2026 19:46:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651966; cv=none; b=Qsj+upm6CAjMdTueGGrE7giixMShkd91wKn9HMjg+e5Me39qrh/evkze34qXC5BpsoUMxjnPfp5qozIS1XcWeFOhZFYeWLnPP6lSoF54+9ZNnb1/4T0Fr7hntSedIUXUeYK8xCx73K8d/yqJlFn4O2YQqosnVBtfrNAVQbgSHPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779651966; c=relaxed/simple; bh=WIKc2AWfDYUc69JvL1/9qtytzct+TF9XfENjVXjaDWY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TqkkyhbPM/P22uKGswf2r7VgeerbV5GPMZZBk11ZqicAc2AMFCwhl6fWrSPwWBs/PjRliJRUSSmbi4WoTq7LfyU9LWPJTba6s06W1BwEKyxES5hyCBzqS1Phil7uML6y1rtxP8J49H0Istd66KqR3BF0vqplyq6qD/w0p40Zcyo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=URr+eE6f; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="URr+eE6f" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2b9fcf7c91bso101609575ad.0 for ; Sun, 24 May 2026 12:46:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779651962; x=1780256762; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ao2qyIA2jJ7uaRRfz0Dt0ISPAp8Fb4RgnxFXCHmkExc=; b=URr+eE6f0j5ZmAn+SuHtUpKNKt38qDPQS4oblsOXJta8D+z1Wv2HgOrbHu7CscRNCY g+QSjdxOfSLT+A5sWaZrgtQ5BVqwRpUcmSQQT/77mPiNThMET2iw4e8430G4t1ZN0GKM I+fE2pENuTwXeHkuPav6sIa1us+UvwHQ8duf6xyYVROxprbirJhkjGpLdPRKrqNDDbzQ vqoV6yHKSPde/ItBMURNcSU+zcgGP5PiDHq+6/3ef2cFFmAJHS93n0z7n1BzQ+Us6wim /EOxH8EeZmwGf06Yc0iCBAs3faeFdvYzweMws6xuFkynxlyOccNVtLERLwFspqjVy+Sp hwcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779651962; x=1780256762; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ao2qyIA2jJ7uaRRfz0Dt0ISPAp8Fb4RgnxFXCHmkExc=; b=UInwsjoQ03IE5KK3mU7XFf03xwGqu7Y+VJZ2nMzid4okmMKm4Yf+iTwwZE3FnKS7uL LNSVkiGyMGPISn32RZ0vrLNnCMQ1ftDkqsbJurPdfbSj1fNTcbg0w76hQVFm11Ib+3GR BrFRYKJopB+QfBaczEdJdT9TdWsbB9Yor9aVIRl6cZTMKYZlHlUFHdlp+dolvqplaJS7 WeA47KeliIcEn6OPGi1hpMiNn5LhAfxTtPXZKHxCx6bFwl7gEX4Px5c/5AAdYkB1yS14 +AkAz6k9u+BuZJpJcaolrPKJvwwFzHw3Peh9RqoCQ8EZPLGJ2zROC0/xIr+MFpFGZw5b al8Q== X-Forwarded-Encrypted: i=1; AFNElJ+Tsrx0Qb4u5UO1l53QOKMYNngTVg/O15pVzk1Sw3lOcd7Rz6BCSvvF4LoTa2oiMAVuPSSPD0zU7pFk6Gw=@vger.kernel.org X-Gm-Message-State: AOJu0YyCGNgiHi45NXbDT1+/Re0duC1jdeuwa2K2H+SDTtb05U6Tldvp zGRRJXU4au6VUyPx5wrFmpd3UsWBe4DwnhSvrT3g1cCIhJg6CcE2OAVK X-Gm-Gg: Acq92OFzf5Q81zO4EVSnnyvJLkWSlfu4v+T29dpJY1KGA7XFaZvuz/cEQo0mMVSbWOZ UNrd3sz5sKwJq1Xw7udRAGHpnqAtNFkuvzSlY0PRVTFGikhhXA8EAwoYJAcvUN/RyYz1StDXsot 2Va4j8kCRb/o/iAz5x8NygdDibR8iL6plXkemSp7PxAA2DBDP235LHvbiqrWV4j6N2C52z5wInX jopLL8OyVioajK5ROnaA+vi5Uqh4i6CTTAjnIhq6h9hyKI8S7ogzSX37QxxdZ4ataFNmqEIdRY/ wCv/kO43sxyyNMjie0pElsEi97mMXPMKTq6Q4sYJ7jlB4p/L6Pm2Lb+36z1RdqqILMJFOTgcEsI SkArxBvJ1T89QEVJs/gKEV/kHuWL7fo3ZnVa9n2G6ckxEa3/aqVwWsDa40H+n8VzOBJTQS9WB5B 1jIRA+x2Mud78CXbpeNlhFjTVw X-Received: by 2002:a17:902:e885:b0:2bc:e62a:979b with SMTP id d9443c01a7336-2beb0699cdemr130695435ad.30.1779651962547; Sun, 24 May 2026 12:46:02 -0700 (PDT) Received: from mincom1 ([125.149.177.227]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb590aa7esm74414485ad.78.2026.05.24.12.45.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 12:46:02 -0700 (PDT) From: Jihong Min To: Herbert Xu , linux-crypto@vger.kernel.org Cc: Christian Marangi , Antoine Tenart , "David S . Miller" , Richard van Schagen , linux-kernel@vger.kernel.org, Benjamin Larsson , Mieczyslaw Nalewaj , Aleksander Jan Bajkowski , Jihong Min Subject: [PATCH 6/6] crypto: eip93: handle request ID exhaustion Date: Mon, 25 May 2026 04:45:28 +0900 Message-ID: <20260524194528.3666383-7-hurryman2212@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260524194528.3666383-1-hurryman2212@gmail.com> References: <20260524194528.3666383-1-hurryman2212@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The driver stores the async request pointer in an IDR and places the ID in the hardware descriptor. The old allocation used the ring depth as the IDR limit. It also did not check allocation failure, so request pressure could encode a negative error value as a descriptor user ID. Allocate request IDs from the full user ID field range and wait while the IDR is full. Publish the descriptor only after DMA mappings and ID allocation have succeeded. Add unwind paths for mappings that are active when ID allocation fails, and tolerate stale or missing result IDs in the interrupt handler. Fixes: 9739f5f93b78 ("crypto: eip93 - Add Inside Secure SafeXcel EIP-93 cry= pto engine support") Reported-by: Benjamin Larsson Suggested-by: Benjamin Larsson Tested-by: Aleksander Jan Bajkowski Assisted-by: Codex:gpt-5.5 Signed-off-by: Jihong Min --- .../crypto/inside-secure/eip93/eip93-common.c | 48 +++++++++++++++---- .../crypto/inside-secure/eip93/eip93-common.h | 3 ++ .../crypto/inside-secure/eip93/eip93-hash.c | 26 +++++++--- .../crypto/inside-secure/eip93/eip93-main.c | 6 +++ .../crypto/inside-secure/eip93/eip93-main.h | 2 + 5 files changed, 69 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/inside-secure/eip93/eip93-common.c b/drivers/cr= ypto/inside-secure/eip93/eip93-common.c index f422c93748c9..88b89d05d510 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-common.c +++ b/drivers/crypto/inside-secure/eip93/eip93-common.c @@ -65,6 +65,31 @@ int eip93_parse_ctrl_stat_err(struct eip93_device *eip93= , int err) } } =20 +int eip93_alloc_request_id(struct eip93_device *eip93, void *request) +{ + int id; + + scoped_guard(spinlock_bh, &eip93->ring->idr_lock) + id =3D idr_alloc(&eip93->ring->crypto_async_idr, request, 0, + EIP93_REQUEST_IDR_LIMIT, GFP_ATOMIC); + + return id; +} + +int eip93_alloc_request_id_wait(struct eip93_device *eip93, void *request) +{ + int id; + + for (;;) { + id =3D eip93_alloc_request_id(eip93, request); + if (id !=3D -ENOSPC) + return id; + + usleep_range(EIP93_RING_BUSY_DELAY, + EIP93_RING_BUSY_DELAY * 2); + } +} + static void *eip93_ring_next_wptr(struct eip93_device *eip93, struct eip93_desc_ring *ring) { @@ -597,15 +622,6 @@ int eip93_send_req(struct crypto_async_request *async, cdesc.sa_addr =3D rctx->sa_record_base; cdesc.arc4_addr =3D 0; =20 - scoped_guard(spinlock_bh, &eip93->ring->idr_lock) - crypto_async_idr =3D idr_alloc(&eip93->ring->crypto_async_idr, async, 0, - EIP93_RING_NUM - 1, GFP_ATOMIC); - - cdesc.user_id =3D FIELD_PREP(EIP93_PE_USER_ID_CRYPTO_IDR, (u16)crypto_asy= nc_idr) | - FIELD_PREP(EIP93_PE_USER_ID_DESC_FLAGS, rctx->desc_flags); - - rctx->cdesc =3D &cdesc; - /* map DMA_BIDIRECTIONAL to invalidate cache on destination * implies __dma_cache_wback_inv */ @@ -620,8 +636,22 @@ int eip93_send_req(struct crypto_async_request *async, goto free_sg_dma; } =20 + crypto_async_idr =3D eip93_alloc_request_id_wait(eip93, async); + if (crypto_async_idr < 0) { + err =3D crypto_async_idr; + goto free_src_sg_dma; + } + + cdesc.user_id =3D FIELD_PREP(EIP93_PE_USER_ID_CRYPTO_IDR, crypto_async_id= r) | + FIELD_PREP(EIP93_PE_USER_ID_DESC_FLAGS, rctx->desc_flags); + + rctx->cdesc =3D &cdesc; + return eip93_scatter_combine(eip93, rctx, datalen, split, offsetin); =20 +free_src_sg_dma: + if (src !=3D dst) + dma_unmap_sg(eip93->dev, src, rctx->src_nents, DMA_TO_DEVICE); free_sg_dma: dma_unmap_sg(eip93->dev, dst, rctx->dst_nents, DMA_BIDIRECTIONAL); free_sa_state_ctr_dma: diff --git a/drivers/crypto/inside-secure/eip93/eip93-common.h b/drivers/cr= ypto/inside-secure/eip93/eip93-common.h index 41c43782eb5c..3898962d0abf 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-common.h +++ b/drivers/crypto/inside-secure/eip93/eip93-common.h @@ -17,6 +17,9 @@ void eip93_set_sa_record(struct sa_record *sa_record, con= st unsigned int keylen, =20 int eip93_parse_ctrl_stat_err(struct eip93_device *eip93, int err); =20 +int eip93_alloc_request_id(struct eip93_device *eip93, void *request); +int eip93_alloc_request_id_wait(struct eip93_device *eip93, void *request); + int eip93_hmac_setkey(u32 ctx_flags, const u8 *key, unsigned int keylen, unsigned int hashlen, u8 *ipad, u8 *opad, bool skip_ipad); diff --git a/drivers/crypto/inside-secure/eip93/eip93-hash.c b/drivers/cryp= to/inside-secure/eip93/eip93-hash.c index 060e90c5eaa7..512e0e2ce25e 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-hash.c +++ b/drivers/crypto/inside-secure/eip93/eip93-hash.c @@ -221,6 +221,7 @@ static int eip93_send_hash_req(struct crypto_async_requ= est *async, u8 *data, struct eip93_device *eip93 =3D ctx->eip93; struct eip93_descriptor cdesc =3D { }; dma_addr_t src_addr; + bool hmac_sa_mapped =3D false; int ret; =20 /* Map block data to DMA */ @@ -258,22 +259,23 @@ static int eip93_send_hash_req(struct crypto_async_re= quest *async, u8 *data, ret =3D dma_mapping_error(eip93->dev, rctx->sa_record_hmac_base); if (ret) { rctx->sa_record_hmac_base =3D 0; - dma_unmap_single(eip93->dev, src_addr, len, - DMA_TO_DEVICE); - return ret; + goto unmap_src; } =20 cdesc.sa_addr =3D rctx->sa_record_hmac_base; + hmac_sa_mapped =3D true; } =20 cdesc.pe_ctrl_stat_word |=3D EIP93_PE_CTRL_PE_HASH_FINAL; } =20 - scoped_guard(spinlock_bh, &eip93->ring->idr_lock) - crypto_async_idr =3D idr_alloc(&eip93->ring->crypto_async_idr, async, 0, - EIP93_RING_NUM - 1, GFP_ATOMIC); + crypto_async_idr =3D eip93_alloc_request_id_wait(eip93, async); + if (crypto_async_idr < 0) { + ret =3D crypto_async_idr; + goto unmap_hmac_sa; + } =20 - cdesc.user_id |=3D FIELD_PREP(EIP93_PE_USER_ID_CRYPTO_IDR, (u16)crypto_a= sync_idr) | + cdesc.user_id |=3D FIELD_PREP(EIP93_PE_USER_ID_CRYPTO_IDR, crypto_async_= idr) | FIELD_PREP(EIP93_PE_USER_ID_DESC_FLAGS, EIP93_DESC_LAST); } =20 @@ -291,6 +293,16 @@ static int eip93_send_hash_req(struct crypto_async_req= uest *async, u8 *data, =20 *data_dma =3D src_addr; return 0; + +unmap_hmac_sa: + if (hmac_sa_mapped) { + dma_unmap_single(eip93->dev, rctx->sa_record_hmac_base, + sizeof(rctx->sa_record_hmac), DMA_TO_DEVICE); + rctx->sa_record_hmac_base =3D 0; + } +unmap_src: + dma_unmap_single(eip93->dev, src_addr, len, DMA_TO_DEVICE); + return ret; } =20 static int eip93_hash_init(struct ahash_request *req) diff --git a/drivers/crypto/inside-secure/eip93/eip93-main.c b/drivers/cryp= to/inside-secure/eip93/eip93-main.c index e3bd28cc0c67..0de18a0cbe33 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-main.c +++ b/drivers/crypto/inside-secure/eip93/eip93-main.c @@ -257,6 +257,12 @@ static void eip93_handle_result_descriptor(struct eip9= 3_device *eip93) idr_remove(&eip93->ring->crypto_async_idr, crypto_idr); } =20 + if (!async) { + dev_warn_ratelimited(eip93->dev, "missing request id %u\n", + crypto_idr); + goto get_more; + } + /* Parse error in ctrl stat word */ err =3D eip93_parse_ctrl_stat_err(eip93, err); =20 diff --git a/drivers/crypto/inside-secure/eip93/eip93-main.h b/drivers/cryp= to/inside-secure/eip93/eip93-main.h index 990c2401b7ce..5237b75bba62 100644 --- a/drivers/crypto/inside-secure/eip93/eip93-main.h +++ b/drivers/crypto/inside-secure/eip93/eip93-main.h @@ -13,11 +13,13 @@ #include #include #include +#include =20 #define EIP93_RING_BUSY_DELAY 500 =20 #define EIP93_RING_NUM 512 #define EIP93_RING_BUSY 32 +#define EIP93_REQUEST_IDR_LIMIT (U16_MAX + 1) #define EIP93_CRA_PRIORITY 1500 =20 #define EIP93_RING_SA_STATE_ADDR(base, idx) ((base) + (idx)) --=20 2.53.0