mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
curl: patch CVE-2025-14819
Pick patch per [1]. Additionally pick commit with definition of CURL_UNCONST to make the cherry-pick possible without build errors. It will be probably needed also by further CVE patches. [1] https://curl.se/docs/CVE-2025-14819.html (From OE-Core rev: 3a8e5ae08380ca201df950546dd5f02f9bbe1237) Signed-off-by: Peter Marko <peter.marko@siemens.com> Signed-off-by: Yoann Congal <yoann.congal@smile.fr> Signed-off-by: Paul Barker <paul@pbarker.dev> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
7a394819a8
commit
ea774774ef
@@ -0,0 +1,85 @@
|
|||||||
|
From 9989d5392e9e61c81fdd3e464511ddd8d73c2f87 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Viktor Szakats <commit@vsz.me>
|
||||||
|
Date: Fri, 31 Jan 2025 23:20:46 +0100
|
||||||
|
Subject: [PATCH] build: enable `-Wcast-qual`, fix or silence compiler warnings
|
||||||
|
|
||||||
|
The issues found fell into these categories, with the applied fixes:
|
||||||
|
|
||||||
|
- const was accidentally stripped.
|
||||||
|
Adjust code to not cast or cast with const.
|
||||||
|
|
||||||
|
- const/volatile missing from arguments, local variables.
|
||||||
|
Constify arguments or variables, adjust/delete casts. Small code
|
||||||
|
changes in a few places.
|
||||||
|
|
||||||
|
- const must be stripped because an API dependency requires it.
|
||||||
|
Strip `const` with `CURL_UNCONST()` macro to silence the warning out
|
||||||
|
of our control. These happen at API boundaries. Sometimes they depend
|
||||||
|
on dependency version, which this patch handles as necessary. Also
|
||||||
|
enable const support for the zlib API, using `ZLIB_CONST`. Supported
|
||||||
|
by zlib 1.2.5.2 and newer.
|
||||||
|
|
||||||
|
- const must be stripped because a curl API requires it.
|
||||||
|
Strip `const` with `CURL_UNCONST()` macro to silence the warning out
|
||||||
|
of our immediate control. For example we promise to send a non-const
|
||||||
|
argument to a callback, though the data is const internally.
|
||||||
|
|
||||||
|
- other cases where we may avoid const stripping by code changes.
|
||||||
|
Also silenced with `CURL_UNCONST()`.
|
||||||
|
|
||||||
|
- there are 3 places where `CURL_UNCONST()` is cast again to const.
|
||||||
|
To silence this type of warning:
|
||||||
|
```
|
||||||
|
lib/vquic/curl_osslq.c:1015:29: error: to be safe all intermediate
|
||||||
|
pointers in cast from 'unsigned char **' to 'const unsigned char **'
|
||||||
|
must be 'const' qualified [-Werror=cast-qual]
|
||||||
|
lib/cf-socket.c:734:32: error: to be safe all intermediate pointers in
|
||||||
|
cast from 'char **' to 'const char **' must be 'const' qualified
|
||||||
|
[-Werror=cast-qual]
|
||||||
|
```
|
||||||
|
There may be a better solution, but I couldn't find it.
|
||||||
|
|
||||||
|
These cases are handled in separate subcommits, but without further
|
||||||
|
markup.
|
||||||
|
|
||||||
|
If you see a `-Wcast-qual` warning in curl, we appreciate your report
|
||||||
|
about it.
|
||||||
|
|
||||||
|
Closes #16142
|
||||||
|
|
||||||
|
Upstream-Status: Backport [https://github.com/curl/curl/commit/9989d5392e9e61c81fdd3e464511ddd8d73c2f87]
|
||||||
|
|
||||||
|
Picked only header file definition, not complete code refactoring.
|
||||||
|
CURL_UNCONST will be probably needed also by further CVE patches due to this rework.
|
||||||
|
|
||||||
|
Also later modified by removing VS2008 code per 2e1a045d8985e5daa4d9a4f908ed870a16d8e41e.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||||
|
---
|
||||||
|
lib/curl_setup_once.h | 10 +++++++++-
|
||||||
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/curl_setup_once.h b/lib/curl_setup_once.h
|
||||||
|
index bf0ee663d3..df5b44c478 100644
|
||||||
|
--- a/lib/curl_setup_once.h
|
||||||
|
+++ b/lib/curl_setup_once.h
|
||||||
|
@@ -69,10 +69,18 @@
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#ifdef USE_WOLFSSL
|
||||||
|
+#if defined(HAVE_STDINT_H) || defined(USE_WOLFSSL)
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Macro to strip 'const' without triggering a compiler warning.
|
||||||
|
+ Use* it for APIs that do not or cannot support the const qualifier. */
|
||||||
|
+#ifdef HAVE_STDINT_H
|
||||||
|
+# define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
|
||||||
|
+#else
|
||||||
|
+# define CURL_UNCONST(p) ((void *)(p)) /* Fall back to simple cast */
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#ifdef USE_SCHANNEL
|
||||||
|
/* Must set this before <schannel.h> is included directly or indirectly by
|
||||||
|
another Windows header. */
|
||||||
73
meta/recipes-support/curl/curl/CVE-2025-14819.patch
Normal file
73
meta/recipes-support/curl/curl/CVE-2025-14819.patch
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
From cd046f6c93b39d673a58c18648d8906e954c4f5d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daniel Stenberg <daniel@haxx.se>
|
||||||
|
Date: Wed, 17 Dec 2025 10:54:16 +0100
|
||||||
|
Subject: [PATCH] openssl: toggling CURLSSLOPT_NO_PARTIALCHAIN makes a
|
||||||
|
different CA cache
|
||||||
|
|
||||||
|
Reported-by: Stanislav Fort
|
||||||
|
|
||||||
|
Closes #20009
|
||||||
|
|
||||||
|
CVE: CVE-2025-14819
|
||||||
|
Upstream-Status: Backport [https://github.com/curl/curl/commit/cd046f6c93b39d673a58c18648d8906e954c4f5d]
|
||||||
|
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||||
|
---
|
||||||
|
lib/vtls/openssl.c | 12 ++++++++++--
|
||||||
|
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c
|
||||||
|
index a7f169d641..7563d9a090 100644
|
||||||
|
--- a/lib/vtls/openssl.c
|
||||||
|
+++ b/lib/vtls/openssl.c
|
||||||
|
@@ -317,6 +317,7 @@ struct multi_ssl_backend_data {
|
||||||
|
char *CAfile; /* CAfile path used to generate X509 store */
|
||||||
|
X509_STORE *store; /* cached X509 store or NULL if none */
|
||||||
|
struct curltime time; /* when the cached store was created */
|
||||||
|
+ BIT(no_partialchain); /* keep partial chain state */
|
||||||
|
};
|
||||||
|
#endif /* HAVE_SSL_X509_STORE_SHARE */
|
||||||
|
|
||||||
|
@@ -3378,12 +3379,16 @@ static bool cached_x509_store_expired(const struct Curl_easy *data,
|
||||||
|
|
||||||
|
static bool cached_x509_store_different(
|
||||||
|
struct Curl_cfilter *cf,
|
||||||
|
+ const struct Curl_easy *data,
|
||||||
|
const struct multi_ssl_backend_data *mb)
|
||||||
|
{
|
||||||
|
struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
|
||||||
|
+ struct ssl_config_data *ssl_config =
|
||||||
|
+ Curl_ssl_cf_get_config(cf, CURL_UNCONST(data));
|
||||||
|
+ if(mb->no_partialchain != ssl_config->no_partialchain)
|
||||||
|
+ return TRUE;
|
||||||
|
if(!mb->CAfile || !conn_config->CAfile)
|
||||||
|
return mb->CAfile != conn_config->CAfile;
|
||||||
|
-
|
||||||
|
return strcmp(mb->CAfile, conn_config->CAfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -3398,7 +3403,7 @@ static X509_STORE *get_cached_x509_store(struct Curl_cfilter *cf,
|
||||||
|
multi->ssl_backend_data &&
|
||||||
|
multi->ssl_backend_data->store &&
|
||||||
|
!cached_x509_store_expired(data, multi->ssl_backend_data) &&
|
||||||
|
- !cached_x509_store_different(cf, multi->ssl_backend_data)) {
|
||||||
|
+ !cached_x509_store_different(cf, data, multi->ssl_backend_data)) {
|
||||||
|
store = multi->ssl_backend_data->store;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -3427,6 +3432,8 @@ static void set_cached_x509_store(struct Curl_cfilter *cf,
|
||||||
|
|
||||||
|
if(X509_STORE_up_ref(store)) {
|
||||||
|
char *CAfile = NULL;
|
||||||
|
+ struct ssl_config_data *ssl_config =
|
||||||
|
+ Curl_ssl_cf_get_config(cf, CURL_UNCONST(data));
|
||||||
|
|
||||||
|
if(conn_config->CAfile) {
|
||||||
|
CAfile = strdup(conn_config->CAfile);
|
||||||
|
@@ -3444,6 +3451,7 @@ static void set_cached_x509_store(struct Curl_cfilter *cf,
|
||||||
|
mbackend->time = Curl_now();
|
||||||
|
mbackend->store = store;
|
||||||
|
mbackend->CAfile = CAfile;
|
||||||
|
+ mbackend->no_partialchain = ssl_config->no_partialchain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -26,6 +26,8 @@ SRC_URI = " \
|
|||||||
file://CVE-2025-0167.patch \
|
file://CVE-2025-0167.patch \
|
||||||
file://CVE-2025-9086.patch \
|
file://CVE-2025-9086.patch \
|
||||||
file://CVE-2025-14017.patch \
|
file://CVE-2025-14017.patch \
|
||||||
|
file://0001-build-enable-Wcast-qual-fix-or-silence-compiler-warn.patch \
|
||||||
|
file://CVE-2025-14819.patch \
|
||||||
"
|
"
|
||||||
|
|
||||||
SRC_URI:append:class-nativesdk = " \
|
SRC_URI:append:class-nativesdk = " \
|
||||||
|
|||||||
Reference in New Issue
Block a user