From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C7F081DFF0; Thu, 18 Dec 2025 03:48:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029737; cv=none; b=OtE+4ERhfsFuyfCtGhfab5ZzcJyMqkrlAnvnY4+m6pnv2vvQRDNQJVlvqUa5CwZcPULheKD/sTXiA+lZjgbvi235MspXqHbOzxJCVvq9sZghGASL1EryxF1PUS5JWhKDgh+kuRA+Ze0oeO3eqtanxeqKA1YUAbrEUDprao95rwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029737; c=relaxed/simple; bh=IYV1X0ga8qRMf8n/ktRwHAqi6IKsEaS/OiTA+PNidmw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=se1oluXJrCulhK3J+UPZ99cpV7F9sYixf5/TA36PNA6DYMnq2G50+xoxqx0E/1+wVeTbFQSWd5FKUY6OfySLAIfU9C4/T9J+6Jxvx5e3ZwctIw2L9zYHEJ5A/lJiX486BvfWa/PlpC9d3aB0I79P6GhPiqTU8bwN6oSjiLbAK4M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8Axz8OleUNpbVwAAA--.1760S3; Thu, 18 Dec 2025 11:48:53 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJBx68GfeUNpvy4BAA--.2184S3; Thu, 18 Dec 2025 11:48:50 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" , wangyangxin Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, stable@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 1/9] crypto: virtio: Add spinlock protection with virtqueue notification Date: Thu, 18 Dec 2025 11:48:38 +0800 Message-Id: <20251218034846.948860-2-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJBx68GfeUNpvy4BAA--.2184S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" When VM boots with one virtio-crypto PCI device and builtin backend, run openssl benchmark command with multiple processes, such as openssl speed -evp aes-128-cbc -engine afalg -seconds 10 -multi 32 openssl processes will hangup and there is error reported like this: virtio_crypto virtio0: dataq.0:id 3 is not a head! It seems that the data virtqueue need protection when it is handled for virtio done notification. If the spinlock protection is added in virtcrypto_done_task(), openssl benchmark with multiple processes works well. Fixes: fed93fb62e05 ("crypto: virtio - Handle dataq logic with tasklet") Cc: stable@vger.kernel.org Signed-off-by: Bibo Mao Acked-by: Jason Wang Acked-by: Michael S. Tsirkin --- drivers/crypto/virtio/virtio_crypto_core.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/crypto/virtio/virtio_crypto_core.c b/drivers/crypto/vi= rtio/virtio_crypto_core.c index 3d241446099c..ccc6b5c1b24b 100644 --- a/drivers/crypto/virtio/virtio_crypto_core.c +++ b/drivers/crypto/virtio/virtio_crypto_core.c @@ -75,15 +75,20 @@ static void virtcrypto_done_task(unsigned long data) struct data_queue *data_vq =3D (struct data_queue *)data; struct virtqueue *vq =3D data_vq->vq; struct virtio_crypto_request *vc_req; + unsigned long flags; unsigned int len; =20 + spin_lock_irqsave(&data_vq->lock, flags); do { virtqueue_disable_cb(vq); while ((vc_req =3D virtqueue_get_buf(vq, &len)) !=3D NULL) { + spin_unlock_irqrestore(&data_vq->lock, flags); if (vc_req->alg_cb) vc_req->alg_cb(vc_req, len); + spin_lock_irqsave(&data_vq->lock, flags); } } while (!virtqueue_enable_cb(vq)); + spin_unlock_irqrestore(&data_vq->lock, flags); } =20 static void virtcrypto_dataq_callback(struct virtqueue *vq) --=20 2.39.3 From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D70502192F5; Thu, 18 Dec 2025 03:48:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029743; cv=none; b=HtVdRxm/nwtK3lukpIXiPGlM6yab3CcCLw9Tu/MKE/QGRq2xbDptvONaOd2Kk0+sjmfVDDld+VdXBXMtcXvDXIaGcib9uhJ06rf9tBH3sP9xQkJ3IfZlkRildhIBNXDwSw50J3pB41L6dPcxCkVs/vomlPN9C+sFJiGqzZgdeLY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029743; c=relaxed/simple; bh=S2ESonwdXbfEDVR8IP/myq3d2moUakLuFQtAdmCiq88=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=V2bJyj3p7h788JLDSW/kIRZVe0T/DzkiHmUdWnVTbNREL6YvT/uzXdkGUuSe27hCSNny4ZEb4uCK0YSp9uU/cxJ9KR8X6H006JA/253m3p8JCABL35XAUo9Chj4qbwuPy9ZjcY0fZ3dyrJ+Mde3qaDzMmyGbcsSFODJUEK7UJ4E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8CxrsOleUNpdVwAAA--.1782S3; Thu, 18 Dec 2025 11:48:53 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJBx68GfeUNpvy4BAA--.2184S4; Thu, 18 Dec 2025 11:48:53 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, stable@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 2/9] crypto: virtio: Remove duplicated virtqueue_kick in virtio_crypto_skcipher_crypt_req Date: Thu, 18 Dec 2025 11:48:39 +0800 Message-Id: <20251218034846.948860-3-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJBx68GfeUNpvy4BAA--.2184S4 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" With function virtio_crypto_skcipher_crypt_req(), there is already virtqueue_kick() call with spinlock held in function __virtio_crypto_skcipher_do_req(). Remove duplicated virtqueue_kick() function call here. Fixes: d79b5d0bbf2e ("crypto: virtio - support crypto engine framework") Cc: stable@vger.kernel.org Signed-off-by: Bibo Mao Acked-by: Jason Wang Acked-by: Michael S. Tsirkin --- drivers/crypto/virtio/virtio_crypto_skcipher_algs.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c b/drivers/= crypto/virtio/virtio_crypto_skcipher_algs.c index 1b3fb21a2a7d..11053d1786d4 100644 --- a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +++ b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c @@ -541,8 +541,6 @@ int virtio_crypto_skcipher_crypt_req( if (ret < 0) return ret; =20 - virtqueue_kick(data_vq->vq); - return 0; } =20 --=20 2.39.3 From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 500D2279DC2; Thu, 18 Dec 2025 03:49:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029743; cv=none; b=HutS5F5kUXk8kROn+V2h3YAh29+XHX+DyJNzU+ctw2y5to57TuHc3wfsdEmskRhp0QVfurcQmbx4tYmjyVVBPl6642X0tkkurYL7AMeXZdbORtO/QF37t6qZZO9uEVXSATxPrDQb2LA90HYz5MSppjCQc3yDr4NqnRyP/Lr6opQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029743; c=relaxed/simple; bh=7uEZlY08pApLqncxFus98l7GN5XvIf15qCw1fmPb8g8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aEkIROIc2HPZhfhBpWgj9lOHAk7xNImwImZt0PP17H/fNxjnEuyR6EhJ1R7VjMrAaJsD7LD8KgocrIIGRGx9XVwqYm6Jc5qY2dbeeFdQ2grykoviOQppeERWMoR2jzLHY8KCOOzyM5ok+PN3TUXXeuiR3f04uuH6EXr/jf2d/ds= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8CxVvCmeUNpflwAAA--.1741S3; Thu, 18 Dec 2025 11:48:54 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJBx68GfeUNpvy4BAA--.2184S5; Thu, 18 Dec 2025 11:48:54 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 3/9] crypto: virtio: Replace package id with numa node id Date: Thu, 18 Dec 2025 11:48:40 +0800 Message-Id: <20251218034846.948860-4-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJBx68GfeUNpvy4BAA--.2184S5 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" With multiple virtio crypto devices supported with different NUMA nodes, when crypto session is created, it will search virtio crypto device with the same numa node of current CPU. Here API topology_physical_package_id() is replaced with cpu_to_node() since package id is physical concept, and one package id have multiple memory numa id. Signed-off-by: Bibo Mao Acked-by: Michael S. Tsirkin --- drivers/crypto/virtio/virtio_crypto_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/crypto/virtio/virtio_crypto_common.h b/drivers/crypto/= virtio/virtio_crypto_common.h index 19c934af3df6..e559bdadf4f9 100644 --- a/drivers/crypto/virtio/virtio_crypto_common.h +++ b/drivers/crypto/virtio/virtio_crypto_common.h @@ -135,7 +135,7 @@ static inline int virtio_crypto_get_current_node(void) int cpu, node; =20 cpu =3D get_cpu(); - node =3D topology_physical_package_id(cpu); + node =3D cpu_to_node(cpu); put_cpu(); =20 return node; --=20 2.39.3 From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5EE2729DB61; Thu, 18 Dec 2025 03:49:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029766; cv=none; b=KEkipo66G+qIsclblMvCc9BYz+XkTmuya3oxhHwNiDtRzAfZqTTA32CmeaxsKokyHlXfzUQE/YBHGHbLqLTOLjSN8JxO2sAUSE693qUA/YpPxgmieGbMoXhQ+vE0z+ibESeb73QZ4lrP557VtwTPrRlgB1hRrJqbmtfaeBy+ieA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029766; c=relaxed/simple; bh=JWwaJBFy5oIvmdtqhh5mZ0Gbwalk+2T00rI/ggDjVuU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=n94cHaGy9JUC/fUHC8MBUfQkfoWJVy4DhyOWc0SjEyRJXp/anPHMkOIC1p+3YJTEA7JVrXR/N5hx5NxcbqV6mLn+IW02fjpmcHsY7Bcr91oQc0FLWnuz7haZaV6KqdTZerl3sL+MEMnnC4fveevxo7eq+ZCEhDX4iKMh3HeRf5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8BxcfCreUNph1wAAA--.1729S3; Thu, 18 Dec 2025 11:48:59 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJAxXcKpeUNpwS4BAA--.2172S2; Thu, 18 Dec 2025 11:48:57 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 4/9] crypto: virtio: Add algo pointer in virtio_crypto_skcipher_ctx Date: Thu, 18 Dec 2025 11:48:41 +0800 Message-Id: <20251218034846.948860-5-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJAxXcKpeUNpwS4BAA--.2172S2 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" Structure virtio_crypto_skcipher_ctx is allocated together with crypto_skcipher, and skcipher_alg is set in strucutre crypto_skcipher when it is created. Here add virtio_crypto_algo pointer in virtio_crypto_skcipher_ctx and set it in function virtio_crypto_skcipher_init(). So crypto service and algo can be acquired from virtio_crypto_algo pointer. Signed-off-by: Bibo Mao Acked-by: Michael S. Tsirkin --- .../virtio/virtio_crypto_skcipher_algs.c | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c b/drivers/= crypto/virtio/virtio_crypto_skcipher_algs.c index 11053d1786d4..8a139de3d064 100644 --- a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +++ b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c @@ -15,9 +15,11 @@ #include "virtio_crypto_common.h" =20 =20 +struct virtio_crypto_algo; struct virtio_crypto_skcipher_ctx { struct virtio_crypto *vcrypto; =20 + struct virtio_crypto_algo *alg; struct virtio_crypto_sym_session_info enc_sess_info; struct virtio_crypto_sym_session_info dec_sess_info; }; @@ -108,9 +110,7 @@ virtio_crypto_alg_validate_key(int key_len, uint32_t *a= lg) =20 static int virtio_crypto_alg_skcipher_init_session( struct virtio_crypto_skcipher_ctx *ctx, - uint32_t alg, const uint8_t *key, - unsigned int keylen, - int encrypt) + const uint8_t *key, unsigned int keylen, int encrypt) { struct scatterlist outhdr, key_sg, inhdr, *sgs[3]; struct virtio_crypto *vcrypto =3D ctx->vcrypto; @@ -140,7 +140,7 @@ static int virtio_crypto_alg_skcipher_init_session( /* Pad ctrl header */ ctrl =3D &vc_ctrl_req->ctrl; ctrl->header.opcode =3D cpu_to_le32(VIRTIO_CRYPTO_CIPHER_CREATE_SESSION); - ctrl->header.algo =3D cpu_to_le32(alg); + ctrl->header.algo =3D cpu_to_le32(ctx->alg->algonum); /* Set the default dataqueue id to 0 */ ctrl->header.queue_id =3D 0; =20 @@ -261,13 +261,11 @@ static int virtio_crypto_alg_skcipher_init_sessions( return -EINVAL; =20 /* Create encryption session */ - ret =3D virtio_crypto_alg_skcipher_init_session(ctx, - alg, key, keylen, 1); + ret =3D virtio_crypto_alg_skcipher_init_session(ctx, key, keylen, 1); if (ret) return ret; /* Create decryption session */ - ret =3D virtio_crypto_alg_skcipher_init_session(ctx, - alg, key, keylen, 0); + ret =3D virtio_crypto_alg_skcipher_init_session(ctx, key, keylen, 0); if (ret) { virtio_crypto_alg_skcipher_close_session(ctx, 1); return ret; @@ -293,7 +291,7 @@ static int virtio_crypto_skcipher_setkey(struct crypto_= skcipher *tfm, int node =3D virtio_crypto_get_current_node(); struct virtio_crypto *vcrypto =3D virtcrypto_get_dev_node(node, - VIRTIO_CRYPTO_SERVICE_CIPHER, alg); + ctx->alg->service, ctx->alg->algonum); if (!vcrypto) { pr_err("virtio_crypto: Could not find a virtio device in the system or = unsupported algo\n"); return -ENODEV; @@ -509,7 +507,11 @@ static int virtio_crypto_skcipher_decrypt(struct skcip= her_request *req) =20 static int virtio_crypto_skcipher_init(struct crypto_skcipher *tfm) { + struct virtio_crypto_skcipher_ctx *ctx =3D crypto_skcipher_ctx(tfm); + struct skcipher_alg *alg =3D crypto_skcipher_alg(tfm); + crypto_skcipher_set_reqsize(tfm, sizeof(struct virtio_crypto_sym_request)= ); + ctx->alg =3D container_of(alg, struct virtio_crypto_algo, algo.base); =20 return 0; } --=20 2.39.3 From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0B6662FF66C; Thu, 18 Dec 2025 03:49:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029746; cv=none; b=BPlO2qbXXA9N7LORjBYfIakssKQEW1xz/x2MUthI7o6hFa5Yv3ugWqm5x7ClAdBGyEFpwR8FoPy0eF8chIGeZebsF2lLRiDvO7qNf9NJd3Qp9h9fDfwQzUJ+whpxekTArI5+72t7Xv8x3FJTxdF5wyG6xcPIHv1auqko32G0Xxc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029746; c=relaxed/simple; bh=/DzPOaejdGgvEMqODqPQFsVL3+JPFrDYmIxvR3E+52k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kL6GfAmXkaftaU9+DauCh0woZqlvJOQv+AX9ZuPRLqiHt6acoiznTm655p9TgiVoa1iV61BtU/EcOMEIouXU9H2Oric2bQLVr8dOl2NJNalzIsa+2uYRllQxFUDAKq/MsNGO4HiH1if1uwiEPIXWEBsLAoG/uc7jZxTa7iytb+Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8DxPMOreUNpj1wAAA--.1016S3; Thu, 18 Dec 2025 11:48:59 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJAxXcKpeUNpwS4BAA--.2172S3; Thu, 18 Dec 2025 11:48:58 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 5/9] crypto: virtio: Use generic API aes_check_keylen() Date: Thu, 18 Dec 2025 11:48:42 +0800 Message-Id: <20251218034846.948860-6-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJAxXcKpeUNpwS4BAA--.2172S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" With AES algo, generic API aes_check_keylen() is used to check length of key. Signed-off-by: Bibo Mao Acked-by: Michael S. Tsirkin --- .../virtio/virtio_crypto_skcipher_algs.c | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c b/drivers/= crypto/virtio/virtio_crypto_skcipher_algs.c index 8a139de3d064..682d192a4ed7 100644 --- a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +++ b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c @@ -94,18 +94,16 @@ static u64 virtio_crypto_alg_sg_nents_length(struct sca= tterlist *sg) } =20 static int -virtio_crypto_alg_validate_key(int key_len, uint32_t *alg) +virtio_crypto_alg_validate_key(int key_len, uint32_t alg) { - switch (key_len) { - case AES_KEYSIZE_128: - case AES_KEYSIZE_192: - case AES_KEYSIZE_256: - *alg =3D VIRTIO_CRYPTO_CIPHER_AES_CBC; - break; + switch (alg) { + case VIRTIO_CRYPTO_CIPHER_AES_ECB: + case VIRTIO_CRYPTO_CIPHER_AES_CBC: + case VIRTIO_CRYPTO_CIPHER_AES_CTR: + return aes_check_keylen(key_len); default: return -EINVAL; } - return 0; } =20 static int virtio_crypto_alg_skcipher_init_session( @@ -248,7 +246,6 @@ static int virtio_crypto_alg_skcipher_init_sessions( struct virtio_crypto_skcipher_ctx *ctx, const uint8_t *key, unsigned int keylen) { - uint32_t alg; int ret; struct virtio_crypto *vcrypto =3D ctx->vcrypto; =20 @@ -257,7 +254,7 @@ static int virtio_crypto_alg_skcipher_init_sessions( return -EINVAL; } =20 - if (virtio_crypto_alg_validate_key(keylen, &alg)) + if (virtio_crypto_alg_validate_key(keylen, ctx->alg->algonum)) return -EINVAL; =20 /* Create encryption session */ @@ -279,10 +276,9 @@ static int virtio_crypto_skcipher_setkey(struct crypto= _skcipher *tfm, unsigned int keylen) { struct virtio_crypto_skcipher_ctx *ctx =3D crypto_skcipher_ctx(tfm); - uint32_t alg; int ret; =20 - ret =3D virtio_crypto_alg_validate_key(keylen, &alg); + ret =3D virtio_crypto_alg_validate_key(keylen, ctx->alg->algonum); if (ret) return ret; =20 --=20 2.39.3 From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DCE2E258CE7; Thu, 18 Dec 2025 03:49:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029754; cv=none; b=idAGVEmxs+u69hhs+a4Nz9frn71TG/EJsGr+kacuVNaYUz84c7r7dS0HjqByqKUxWkPfIVtUoV/g4ej9oKh+wHmOprYm4jrmY8YVMtx64nebgpufyHmmmiFeRDJ8r2k3Wi3X910fCNfQZiM7OotA5doU5M31Fm4l4CUDpoCD3gY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029754; c=relaxed/simple; bh=1UhYwSPdYu3p8N92u33jtXlRnLQIOHWDGq0+ij+jLiA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=oF/GPh9PDRoGW8MCBoT7suWD7AzsXgY82ld0qNYFFKGZfUaESISIgiQbrD1D1mi7dhm2ZZKwms2O8o/VToBkm0cpNDfGv5omkAV2A/ytIDq9kmfiD3yGI7o1KGRm8nQPa/z3ftg+z4dtBDxLd7myGEOST+B8vL7Qen0eDgh51gA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8Dx+8KteUNpmlwAAA--.1072S3; Thu, 18 Dec 2025 11:49:01 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJAxXcKpeUNpwS4BAA--.2172S4; Thu, 18 Dec 2025 11:49:00 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 6/9] crypto: virtio: Remove AES specified marcro AES_BLOCK_SIZE Date: Thu, 18 Dec 2025 11:48:43 +0800 Message-Id: <20251218034846.948860-7-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJAxXcKpeUNpwS4BAA--.2172S4 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" Macro AES_BLOCK_SIZE is meaningful only for algo AES, replace it with generic API crypto_skcipher_blocksize(), so that new algo can be added in later. Signed-off-by: Bibo Mao Acked-by: Michael S. Tsirkin --- .../crypto/virtio/virtio_crypto_skcipher_algs.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c b/drivers/= crypto/virtio/virtio_crypto_skcipher_algs.c index 682d192a4ed7..788d2d4a9b83 100644 --- a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +++ b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c @@ -416,8 +416,8 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_sy= m_request *vc_sym_req, memcpy(iv, req->iv, ivsize); if (!vc_sym_req->encrypt) scatterwalk_map_and_copy(req->iv, req->src, - req->cryptlen - AES_BLOCK_SIZE, - AES_BLOCK_SIZE, 0); + req->cryptlen - ivsize, + ivsize, 0); =20 sg_init_one(&iv_sg, iv, ivsize); sgs[num_out++] =3D &iv_sg; @@ -459,6 +459,7 @@ static int virtio_crypto_skcipher_encrypt(struct skciph= er_request *req) { struct crypto_skcipher *atfm =3D crypto_skcipher_reqtfm(req); struct virtio_crypto_skcipher_ctx *ctx =3D crypto_skcipher_ctx(atfm); + unsigned int blocksize =3D crypto_skcipher_blocksize(atfm); struct virtio_crypto_sym_request *vc_sym_req =3D skcipher_request_ctx(req); struct virtio_crypto_request *vc_req =3D &vc_sym_req->base; @@ -468,7 +469,7 @@ static int virtio_crypto_skcipher_encrypt(struct skciph= er_request *req) =20 if (!req->cryptlen) return 0; - if (req->cryptlen % AES_BLOCK_SIZE) + if (req->cryptlen % blocksize) return -EINVAL; =20 vc_req->dataq =3D data_vq; @@ -482,6 +483,7 @@ static int virtio_crypto_skcipher_decrypt(struct skciph= er_request *req) { struct crypto_skcipher *atfm =3D crypto_skcipher_reqtfm(req); struct virtio_crypto_skcipher_ctx *ctx =3D crypto_skcipher_ctx(atfm); + unsigned int blocksize =3D crypto_skcipher_blocksize(atfm); struct virtio_crypto_sym_request *vc_sym_req =3D skcipher_request_ctx(req); struct virtio_crypto_request *vc_req =3D &vc_sym_req->base; @@ -491,7 +493,7 @@ static int virtio_crypto_skcipher_decrypt(struct skciph= er_request *req) =20 if (!req->cryptlen) return 0; - if (req->cryptlen % AES_BLOCK_SIZE) + if (req->cryptlen % blocksize) return -EINVAL; =20 vc_req->dataq =3D data_vq; @@ -547,10 +549,13 @@ static void virtio_crypto_skcipher_finalize_req( struct skcipher_request *req, int err) { + struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); + unsigned int ivsize =3D crypto_skcipher_ivsize(tfm); + if (vc_sym_req->encrypt) scatterwalk_map_and_copy(req->iv, req->dst, - req->cryptlen - AES_BLOCK_SIZE, - AES_BLOCK_SIZE, 0); + req->cryptlen - ivsize, + ivsize, 0); kfree_sensitive(vc_sym_req->iv); virtcrypto_clear_request(&vc_sym_req->base); =20 --=20 2.39.3 From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8F33D2E0400; Thu, 18 Dec 2025 03:49:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029759; cv=none; b=k1fJeNPQ9vLuOjbzuB60jKIumPYcQyYpDfiPCbBhDBPwgp8zPC1reszgIVAAxDkNQL+LQwbzDmbYJAfMZGDzVOnpQyRC/PVRoGZYJA6rAM1ipyyeX50+3u/drMhf5v7MmlXxML1jDVtRM0IN+Db7UV84/6fG/Xu0ZZTa/9llRkU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029759; c=relaxed/simple; bh=bP+MftIy5MZyKErTXJZOXlqqWq32ab3+bPjAzNt3ddw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ojq5HO4zOkzc+Yk8Ush0WOdmH28KH3lElJN1ZRYIWTpRhXjZsAnea82m0lVHB/Q23mIL/NoYMUChwT9ldn9RIqWcvWyXkmLM4ZU79zFBgYuk8Vu07Gn62HHwDiBoPFOi1efIrriafXvYal9w1BvUnWB5Hy6W7EE+uzAQLFCrqJs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8DxAfGueUNpo1wAAA--.1805S3; Thu, 18 Dec 2025 11:49:02 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJAxXcKpeUNpwS4BAA--.2172S5; Thu, 18 Dec 2025 11:49:01 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 7/9] crypto: virtio: Add req_data with structure virtio_crypto_sym_request Date: Thu, 18 Dec 2025 11:48:44 +0800 Message-Id: <20251218034846.948860-8-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJAxXcKpeUNpwS4BAA--.2172S5 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" With normal encrypt/decrypt workflow, req_data with struct type virtio_crypto_op_data_req will be allocated. Here put req_data in virtio_crypto_sym_request, it is pre-allocated when encrypt/decrypt interface is called. Signed-off-by: Bibo Mao Acked-by: Michael S. Tsirkin --- drivers/crypto/virtio/virtio_crypto_skcipher_algs.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c b/drivers/= crypto/virtio/virtio_crypto_skcipher_algs.c index 788d2d4a9b83..bf9fdf56c2a3 100644 --- a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +++ b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c @@ -26,6 +26,7 @@ struct virtio_crypto_skcipher_ctx { =20 struct virtio_crypto_sym_request { struct virtio_crypto_request base; + struct virtio_crypto_op_data_req req_data; =20 /* Cipher or aead */ uint32_t type; @@ -350,14 +351,8 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_s= ym_request *vc_sym_req, if (!sgs) return -ENOMEM; =20 - req_data =3D kzalloc_node(sizeof(*req_data), GFP_KERNEL, - dev_to_node(&vcrypto->vdev->dev)); - if (!req_data) { - kfree(sgs); - return -ENOMEM; - } - - vc_req->req_data =3D req_data; + req_data =3D &vc_sym_req->req_data; + vc_req->req_data =3D NULL; vc_sym_req->type =3D VIRTIO_CRYPTO_SYM_OP_CIPHER; /* Head of operation */ if (vc_sym_req->encrypt) { @@ -450,7 +445,7 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_sy= m_request *vc_sym_req, free_iv: kfree_sensitive(iv); free: - kfree_sensitive(req_data); + memzero_explicit(req_data, sizeof(*req_data)); kfree(sgs); return err; } --=20 2.39.3 From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2722A27F732; Thu, 18 Dec 2025 03:49:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029766; cv=none; b=WmvMuZehZoymPSV7oi+kMZ3V6mPAjir8djDBmiSXhgrvDAi1+ylJ2KS6rwabelFI6QQ2lt9FSVV2/Wu8NrAkNG1Gn+XEHpd0bR5rGOz7PzqtpnmD4wckCFG9G8vCvkhkOHjYqYMaGIO28KFvGsHHIrbXnCcYC9naBAXHarzxinA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029766; c=relaxed/simple; bh=/L8zx1/xYUxLfG4+CNqLMESgm+GHvnGTKbXq26oS//Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=l+Mtz0iZERwW+PyKrOT4pOlNW96N9gxs/0XhGWzggzJe6hNH21cEG5d9CSi+6yjUk1JDOaE81MLS+mjd53E9ui29yxH5o9+/dQgJTH/SMTII56iSi42YI6Zg9VlWU9OGnmai2CDVHOQ7fb+OLLEAsM3JkQMmpjYBpBh/gRD6KhE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8AxisKyeUNprFwAAA--.1063S3; Thu, 18 Dec 2025 11:49:06 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJCxPMKxeUNpwy4BAA--.2235S2; Thu, 18 Dec 2025 11:49:05 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 8/9] crypto: virtio: Add IV buffer in structure virtio_crypto_sym_request Date: Thu, 18 Dec 2025 11:48:45 +0800 Message-Id: <20251218034846.948860-9-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJCxPMKxeUNpwy4BAA--.2235S2 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" Add IV buffer in structure virtio_crypto_sym_request to avoid unnecessary IV buffer allocation in encrypt/decrypt process. And IV buffer is cleared when encrypt/decrypt is finished. Signed-off-by: Bibo Mao Acked-by: Michael S. Tsirkin --- .../virtio/virtio_crypto_skcipher_algs.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c b/drivers/= crypto/virtio/virtio_crypto_skcipher_algs.c index bf9fdf56c2a3..3d47e7c30c6b 100644 --- a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +++ b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c @@ -30,9 +30,9 @@ struct virtio_crypto_sym_request { =20 /* Cipher or aead */ uint32_t type; - uint8_t *iv; /* Encryption? */ bool encrypt; + uint8_t iv[0]; }; =20 struct virtio_crypto_algo { @@ -402,12 +402,7 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_s= ym_request *vc_sym_req, * Avoid to do DMA from the stack, switch to using * dynamically-allocated for the IV */ - iv =3D kzalloc_node(ivsize, GFP_ATOMIC, - dev_to_node(&vcrypto->vdev->dev)); - if (!iv) { - err =3D -ENOMEM; - goto free; - } + iv =3D vc_sym_req->iv; memcpy(iv, req->iv, ivsize); if (!vc_sym_req->encrypt) scatterwalk_map_and_copy(req->iv, req->src, @@ -416,7 +411,6 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_sy= m_request *vc_sym_req, =20 sg_init_one(&iv_sg, iv, ivsize); sgs[num_out++] =3D &iv_sg; - vc_sym_req->iv =3D iv; =20 /* Source data */ for (sg =3D req->src; src_nents; sg =3D sg_next(sg), src_nents--) @@ -443,7 +437,7 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_sy= m_request *vc_sym_req, return 0; =20 free_iv: - kfree_sensitive(iv); + memzero_explicit(iv, ivsize); free: memzero_explicit(req_data, sizeof(*req_data)); kfree(sgs); @@ -502,8 +496,10 @@ static int virtio_crypto_skcipher_init(struct crypto_s= kcipher *tfm) { struct virtio_crypto_skcipher_ctx *ctx =3D crypto_skcipher_ctx(tfm); struct skcipher_alg *alg =3D crypto_skcipher_alg(tfm); + int size; =20 - crypto_skcipher_set_reqsize(tfm, sizeof(struct virtio_crypto_sym_request)= ); + size =3D sizeof(struct virtio_crypto_sym_request) + crypto_skcipher_ivsiz= e(tfm); + crypto_skcipher_set_reqsize(tfm, size); ctx->alg =3D container_of(alg, struct virtio_crypto_algo, algo.base); =20 return 0; @@ -551,7 +547,7 @@ static void virtio_crypto_skcipher_finalize_req( scatterwalk_map_and_copy(req->iv, req->dst, req->cryptlen - ivsize, ivsize, 0); - kfree_sensitive(vc_sym_req->iv); + memzero_explicit(vc_sym_req->iv, ivsize); virtcrypto_clear_request(&vc_sym_req->base); =20 crypto_finalize_skcipher_request(vc_sym_req->base.dataq->engine, --=20 2.39.3 From nobody Mon Feb 9 19:30:27 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7F4D9258CE5; Thu, 18 Dec 2025 03:49:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029772; cv=none; b=Vi/c/VGXWxKf8fzpVqvdV9H1U1Bm0PXppaEzK7YUpmlaYU3f6O2Peog1TlVG4J2kDWiQQVnBqMhoqcvXNgM2lz3Njg+xexavF9ujDkiKDwBpMPJKe5PDf4Uaeyp55pNkLBePBXey8ZnxMK+NWd8IQ9uflIE1N+N/4hsNNR33KeA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766029772; c=relaxed/simple; bh=grCOtZ4Ju+0sueoqgtSNNz9VfT19eAf/VTVNoD0qhNE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dUzxhnVqUBq0NfIND0v8ivZPk5cWIW+NFTTqUZqZZQznMUbBYtRIyItOJnsQ8uZK1piE18odg8ij3TMxGXW+pLjGiv2L+pgCiAx2Y8EVsZJK1e7WIPrrR9y24cLCrcOoaI1EGyo+6udn9XrDTC6twE1LakfBn34GcaGox94CTTY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8AxScKzeUNptFwAAA--.1102S3; Thu, 18 Dec 2025 11:49:07 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJCxPMKxeUNpwy4BAA--.2235S3; Thu, 18 Dec 2025 11:49:06 +0800 (CST) From: Bibo Mao To: Gonglei , "Michael S . Tsirkin" , Jason Wang , Eric Biggers , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Herbert Xu , "David S. Miller" Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-crypto@vger.kernel.org, virtualization@lists.linux.dev Subject: [PATCH v4 9/9] crypto: virtio: Add skcipher support without IV Date: Thu, 18 Dec 2025 11:48:46 +0800 Message-Id: <20251218034846.948860-10-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20251218034846.948860-1-maobibo@loongson.cn> References: <20251218034846.948860-1-maobibo@loongson.cn> 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 X-CM-TRANSID: qMiowJCxPMKxeUNpwy4BAA--.2235S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" Some skcipher algo has no IV buffer such as ecb(aes) also, here add checking with ivsize. Signed-off-by: Bibo Mao Acked-by: Michael S. Tsirkin --- .../virtio/virtio_crypto_skcipher_algs.c | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c b/drivers/= crypto/virtio/virtio_crypto_skcipher_algs.c index 3d47e7c30c6b..a5e6993da2ef 100644 --- a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +++ b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c @@ -345,7 +345,9 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_sy= m_request *vc_sym_req, src_nents, dst_nents); =20 /* Why 3? outhdr + iv + inhdr */ - sg_total =3D src_nents + dst_nents + 3; + sg_total =3D src_nents + dst_nents + 2; + if (ivsize) + sg_total +=3D 1; sgs =3D kcalloc_node(sg_total, sizeof(*sgs), GFP_KERNEL, dev_to_node(&vcrypto->vdev->dev)); if (!sgs) @@ -402,15 +404,17 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_= sym_request *vc_sym_req, * Avoid to do DMA from the stack, switch to using * dynamically-allocated for the IV */ - iv =3D vc_sym_req->iv; - memcpy(iv, req->iv, ivsize); - if (!vc_sym_req->encrypt) - scatterwalk_map_and_copy(req->iv, req->src, - req->cryptlen - ivsize, - ivsize, 0); - - sg_init_one(&iv_sg, iv, ivsize); - sgs[num_out++] =3D &iv_sg; + if (ivsize) { + iv =3D vc_sym_req->iv; + memcpy(iv, req->iv, ivsize); + if (!vc_sym_req->encrypt) + scatterwalk_map_and_copy(req->iv, req->src, + req->cryptlen - ivsize, + ivsize, 0); + + sg_init_one(&iv_sg, iv, ivsize); + sgs[num_out++] =3D &iv_sg; + } =20 /* Source data */ for (sg =3D req->src; src_nents; sg =3D sg_next(sg), src_nents--) @@ -437,7 +441,8 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_sy= m_request *vc_sym_req, return 0; =20 free_iv: - memzero_explicit(iv, ivsize); + if (ivsize) + memzero_explicit(iv, ivsize); free: memzero_explicit(req_data, sizeof(*req_data)); kfree(sgs); @@ -543,11 +548,13 @@ static void virtio_crypto_skcipher_finalize_req( struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); unsigned int ivsize =3D crypto_skcipher_ivsize(tfm); =20 - if (vc_sym_req->encrypt) - scatterwalk_map_and_copy(req->iv, req->dst, - req->cryptlen - ivsize, - ivsize, 0); - memzero_explicit(vc_sym_req->iv, ivsize); + if (ivsize) { + if (vc_sym_req->encrypt) + scatterwalk_map_and_copy(req->iv, req->dst, + req->cryptlen - ivsize, + ivsize, 0); + memzero_explicit(vc_sym_req->iv, ivsize); + } virtcrypto_clear_request(&vc_sym_req->base); =20 crypto_finalize_skcipher_request(vc_sym_req->base.dataq->engine, --=20 2.39.3