mirror of
https://git.yoctoproject.org/poky
synced 2026-10-17 05:37:02 +00:00
qemu: Fix CVE-2025-14876
This patch applies the upstream v10.0.8 stable backport for CVE-2025-14876. The upstream fix commit is referenced in [1], and the public CVE advisory is referenced in [2]. The individual backported commit links are recorded in the embedded patch headers when the fix expands to multiple commits. [1] https://gitlab.com/qemu-project/qemu/-/commit/e649201bb96ae7e91a69d57392c8907ec085111e [2] https://access.redhat.com/security/cve/CVE-2025-14876 (From OE-Core rev: 2e1f2bbf21f332dd34cff915e06a8545bc974cca) Signed-off-by: Ashishkumar Parmar <asparmar@cisco.com> Signed-off-by: Yoann Congal <yoann.congal@smile.fr> Signed-off-by: Paul Barker <paul@pbarker.dev>
This commit is contained in:
1 parent
db642a22a1
commit
de00d925c6
3 files changed
+110
No files matched your search
@@ -48,6 +48,8 @@ SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
|
||||
file://CVE-2025-11234-01.patch \
|
||||
file://CVE-2025-11234-02.patch \
|
||||
file://CVE-2024-6519.patch \
|
||||
file://CVE-2025-14876_p1.patch \
|
||||
file://CVE-2025-14876_p2.patch \
|
||||
"
|
||||
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
From 96ac1b4f958287776ec2199749beaaad60148a85 Mon Sep 17 00:00:00 2001
|
||||
From: zhenwei pi <pizhenwei@tensorfer.com>
|
||||
Date: Sun, 21 Dec 2025 10:43:20 +0800
|
||||
Subject: [PATCH] hw/virtio/virtio-crypto: verify asym request size
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The total lenght of request is limited by cryptodev config, verify it
|
||||
to avoid unexpected request from guest.
|
||||
|
||||
CVE: CVE-2025-14876
|
||||
Upstream-Status: Backport [https://gitlab.com/qemu-project/qemu/-/commit/e649201bb96ae7e91a69d57392c8907ec085111e]
|
||||
|
||||
Fixes: CVE-2025-14876
|
||||
Fixes: 0e660a6f90a ("crypto: Introduce RSA algorithm")
|
||||
Reported-by: 이재영 <nakamurajames123@gmail.com>
|
||||
Signed-off-by: zhenwei pi <zhenwei.pi@linux.dev>
|
||||
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Message-Id: <20251221024321.143196-2-zhenwei.pi@linux.dev>
|
||||
(cherry picked from commit 91c6438caffc880e999a7312825479685d659b44)
|
||||
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
|
||||
(cherry picked from commit e649201bb96ae7e91a69d57392c8907ec085111e)
|
||||
Signed-off-by: Ashishkumar Parmar <asparmar@cisco.com>
|
||||
---
|
||||
hw/virtio/virtio-crypto.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c
|
||||
index 4aaced74b..6927f7d1a 100644
|
||||
--- a/hw/virtio/virtio-crypto.c
|
||||
+++ b/hw/virtio/virtio-crypto.c
|
||||
@@ -767,11 +767,18 @@ virtio_crypto_handle_asym_req(VirtIOCrypto *vcrypto,
|
||||
uint32_t len;
|
||||
uint8_t *src = NULL;
|
||||
uint8_t *dst = NULL;
|
||||
+ uint64_t max_len;
|
||||
|
||||
asym_op_info = g_new0(CryptoDevBackendAsymOpInfo, 1);
|
||||
src_len = ldl_le_p(&req->para.src_data_len);
|
||||
dst_len = ldl_le_p(&req->para.dst_data_len);
|
||||
|
||||
+ max_len = (uint64_t)src_len + dst_len;
|
||||
+ if (unlikely(max_len > vcrypto->conf.max_size)) {
|
||||
+ virtio_error(vdev, "virtio-crypto asym request is too large");
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
if (src_len > 0) {
|
||||
src = g_malloc0(src_len);
|
||||
len = iov_to_buf(iov, out_num, 0, src, src_len);
|
||||
@@ -0,0 +1,56 @@
|
||||
From 17f89320724d16437a26a250c82b1649777387f1 Mon Sep 17 00:00:00 2001
|
||||
From: zhenwei pi <pizhenwei@tensorfer.com>
|
||||
Date: Sun, 21 Dec 2025 10:43:21 +0800
|
||||
Subject: [PATCH] cryptodev-builtin: Limit the maximum size
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This backend driver is used for demonstration purposes only, unlimited
|
||||
size leads QEMU OOM.
|
||||
|
||||
CVE: CVE-2025-14876
|
||||
Upstream-Status: Backport [https://gitlab.com/qemu-project/qemu/-/commit/3464e88bc98d72acc3a9674054b9ed0c3d4e9b90]
|
||||
|
||||
Fixes: CVE-2025-14876
|
||||
Fixes: 1653a5f3fc7 ("cryptodev: introduce a new cryptodev backend")
|
||||
Reported-by: 이재영 <nakamurajames123@gmail.com>
|
||||
Signed-off-by: zhenwei pi <zhenwei.pi@linux.dev>
|
||||
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Message-Id: <20251221024321.143196-3-zhenwei.pi@linux.dev>
|
||||
(cherry picked from commit 7b913094c703641a0442bb1d1165323a019c591c)
|
||||
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
|
||||
(cherry picked from commit 3464e88bc98d72acc3a9674054b9ed0c3d4e9b90)
|
||||
Signed-off-by: Ashishkumar Parmar <asparmar@cisco.com>
|
||||
---
|
||||
backends/cryptodev-builtin.c | 9 +++------
|
||||
1 file changed, 3 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/backends/cryptodev-builtin.c b/backends/cryptodev-builtin.c
|
||||
index 940104ee5..a4c544b6d 100644
|
||||
--- a/backends/cryptodev-builtin.c
|
||||
+++ b/backends/cryptodev-builtin.c
|
||||
@@ -53,6 +53,8 @@ typedef struct CryptoDevBackendBuiltinSession {
|
||||
|
||||
#define CRYPTODEV_BUITLIN_MAX_AUTH_KEY_LEN 512
|
||||
#define CRYPTODEV_BUITLIN_MAX_CIPHER_KEY_LEN 64
|
||||
+/* demonstration purposes only, use a limited size to avoid QEMU OOM */
|
||||
+#define CRYPTODEV_BUITLIN_MAX_REQUEST_SIZE (1024 * 1024)
|
||||
|
||||
struct CryptoDevBackendBuiltin {
|
||||
CryptoDevBackend parent_obj;
|
||||
@@ -98,12 +100,7 @@ static void cryptodev_builtin_init(
|
||||
1u << QCRYPTODEV_BACKEND_SERVICE_MAC;
|
||||
backend->conf.cipher_algo_l = 1u << VIRTIO_CRYPTO_CIPHER_AES_CBC;
|
||||
backend->conf.hash_algo = 1u << VIRTIO_CRYPTO_HASH_SHA1;
|
||||
- /*
|
||||
- * Set the Maximum length of crypto request.
|
||||
- * Why this value? Just avoid to overflow when
|
||||
- * memory allocation for each crypto request.
|
||||
- */
|
||||
- backend->conf.max_size = LONG_MAX - sizeof(CryptoDevBackendOpInfo);
|
||||
+ backend->conf.max_size = CRYPTODEV_BUITLIN_MAX_REQUEST_SIZE;
|
||||
backend->conf.max_cipher_key_len = CRYPTODEV_BUITLIN_MAX_CIPHER_KEY_LEN;
|
||||
backend->conf.max_auth_key_len = CRYPTODEV_BUITLIN_MAX_AUTH_KEY_LEN;
|
||||
cryptodev_builtin_init_akcipher(backend);
|
||||
Reference in new issue
Block a user