mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-10-16 06:37:38 +00:00
strongswan: patch CVE-2026-78127
Use patch[1] provided by strongSwan[2] Details: https://nvd.nist.gov/vuln/detail/cve-2026-78127 [1]https://download.strongswan.org/security/CVE-2026-78127/strongswan-5.3.1-6.0.7_message_log_leak.patch [2]https://www.strongswan.org/blog/2026/09/07/strongswan-vulnerability-(cve-2026-78127).html Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com> Signed-off-by: Anuj Mittal <anuj.mittal@oss.qualcomm.com>
This commit is contained in:
1 parent
e228e7711e
commit
7b8fd4df2e
2 files changed
+116
No files matched your search
@@ -0,0 +1,115 @@
|
||||
From b38d55b7df137e599c0364a8f0e6d3e1ab84ed50 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Brunner <tobias@strongswan.org>
|
||||
Date: Mon, 8 Jun 2026 09:19:42 +0200
|
||||
Subject: [PATCH] message: Avoid memory leak if string buffer for message is
|
||||
too small
|
||||
|
||||
This leaked 40 or 80 bytes per parsed message for the enumerators that
|
||||
were not destroyed. While triggering an OOM condition will require quite
|
||||
a lot of messages and the DoS protection also helps avoiding that this
|
||||
is triggered quickly, it all depends on the memory constraints of the
|
||||
system and the time available to the attacker. Also, if IKEv1 is allowed,
|
||||
it could get quicker as the lack of message IDs doesn't allow dismissing
|
||||
unexpected messages before parsing them.
|
||||
|
||||
Fixes: 092958c89d52 ("fixed payload debug message")
|
||||
Fixes: 6a4a47511f75 ("Show contents of the CP payload in message_t stringification")
|
||||
Fixes: CVE-2026-78127
|
||||
|
||||
CVE: CVE-2026-78127
|
||||
Upstream-Status: Backport [https://github.com/strongswan/strongswan/commit/4b7108ac0f84fbf40da2b510eb6333afa2a54240]
|
||||
|
||||
Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
|
||||
---
|
||||
src/libcharon/encoding/message.c | 23 ++++++++++++-----------
|
||||
1 file changed, 12 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/libcharon/encoding/message.c b/src/libcharon/encoding/message.c
|
||||
index 8da9a1d..a4bf9cb 100644
|
||||
--- a/src/libcharon/encoding/message.c
|
||||
+++ b/src/libcharon/encoding/message.c
|
||||
@@ -1398,7 +1398,7 @@ static char* get_string(private_message_t *this, char *buf, int len)
|
||||
payload->get_type(payload));
|
||||
if (written >= len || written < 0)
|
||||
{
|
||||
- return buf;
|
||||
+ goto err;
|
||||
}
|
||||
pos += written;
|
||||
len -= written;
|
||||
@@ -1424,7 +1424,7 @@ static char* get_string(private_message_t *this, char *buf, int len)
|
||||
}
|
||||
if (written >= len || written < 0)
|
||||
{
|
||||
- return buf;
|
||||
+ goto err;
|
||||
}
|
||||
pos += written;
|
||||
len -= written;
|
||||
@@ -1454,7 +1454,7 @@ static char* get_string(private_message_t *this, char *buf, int len)
|
||||
eap->get_code(eap), method);
|
||||
if (written >= len || written < 0)
|
||||
{
|
||||
- return buf;
|
||||
+ goto err;
|
||||
}
|
||||
pos += written;
|
||||
len -= written;
|
||||
@@ -1495,7 +1495,8 @@ static char* get_string(private_message_t *this, char *buf, int len)
|
||||
attribute->get_type(attribute));
|
||||
if (written >= len || written < 0)
|
||||
{
|
||||
- return buf;
|
||||
+ attributes->destroy(attributes);
|
||||
+ goto err;
|
||||
}
|
||||
pos += written;
|
||||
len -= written;
|
||||
@@ -1507,7 +1508,7 @@ static char* get_string(private_message_t *this, char *buf, int len)
|
||||
written = snprintf(pos, len, ")");
|
||||
if (written >= len || written < 0)
|
||||
{
|
||||
- return buf;
|
||||
+ goto err;
|
||||
}
|
||||
pos += written;
|
||||
len -= written;
|
||||
@@ -1529,7 +1530,7 @@ static char* get_string(private_message_t *this, char *buf, int len)
|
||||
}
|
||||
if (written >= len || written < 0)
|
||||
{
|
||||
- return buf;
|
||||
+ goto err;
|
||||
}
|
||||
pos += written;
|
||||
len -= written;
|
||||
@@ -1544,7 +1545,7 @@ static char* get_string(private_message_t *this, char *buf, int len)
|
||||
frag->get_total_fragments(frag));
|
||||
if (written >= len || written < 0)
|
||||
{
|
||||
- return buf;
|
||||
+ goto err;
|
||||
}
|
||||
pos += written;
|
||||
len -= written;
|
||||
@@ -1557,16 +1558,16 @@ static char* get_string(private_message_t *this, char *buf, int len)
|
||||
written = snprintf(pos, len, "(%d)", unknown->get_type(unknown));
|
||||
if (written >= len || written < 0)
|
||||
{
|
||||
- return buf;
|
||||
+ goto err;
|
||||
}
|
||||
pos += written;
|
||||
len -= written;
|
||||
}
|
||||
}
|
||||
- enumerator->destroy(enumerator);
|
||||
-
|
||||
- /* remove last space */
|
||||
snprintf(pos, len, " ]");
|
||||
+
|
||||
+err:
|
||||
+ enumerator->destroy(enumerator);
|
||||
return buf;
|
||||
}
|
||||
#endif
|
||||
@@ -13,6 +13,7 @@ SRC_URI = "https://download.strongswan.org/strongswan-${PV}.tar.bz2 \
|
||||
file://CVE-2026-78123.patch \
|
||||
file://CVE-2026-78124.patch \
|
||||
file://CVE-2026-78126.patch \
|
||||
file://CVE-2026-78127.patch \
|
||||
"
|
||||
|
||||
SRC_URI[sha256sum] = "07df7cedae56a7f3bb07e66d21a1f9f87e961db70e99184e11d3819413e4f87c"
|
||||
|
||||
Reference in new issue
Block a user