From: Zhang Peng <peng.zhang1...@windriver.com>

CVE-2025-31178:
A flaw was found in gnuplot. The GetAnnotateString() function may lead to a
segmentation fault and cause a system crash.

Reference:
[https://nvd.nist.gov/vuln/detail/CVE-2025-31178]

Upstream patches:
[https://sourceforge.net/p/gnuplot/gnuplot-main/ci/b78cc829a18e9436daaa859c96f3970157f3171e/]

Signed-off-by: Zhang Peng <peng.zhang1...@windriver.com>
---
 .../gnuplot/gnuplot/CVE-2025-31178.patch      | 95 +++++++++++++++++++
 .../recipes-extended/gnuplot/gnuplot_5.4.3.bb |  1 +
 2 files changed, 96 insertions(+)
 create mode 100644 
meta-oe/recipes-extended/gnuplot/gnuplot/CVE-2025-31178.patch

diff --git a/meta-oe/recipes-extended/gnuplot/gnuplot/CVE-2025-31178.patch 
b/meta-oe/recipes-extended/gnuplot/gnuplot/CVE-2025-31178.patch
new file mode 100644
index 0000000000..c783d75180
--- /dev/null
+++ b/meta-oe/recipes-extended/gnuplot/gnuplot/CVE-2025-31178.patch
@@ -0,0 +1,95 @@
+From c625576a4e086f8e3ad6f23559052494465722c6 Mon Sep 17 00:00:00 2001
+From: Ethan A Merritt <merr...@u.washington.edu>
+Date: Tue, 14 Jan 2025 21:23:19 -0800
+Subject: [PATCH] use snprintf to protect against garbage user-supplied mouse
+ format
+
+Bug 2754
+
+CVE: CVE-2025-31178
+Upstream-Status: Backport 
[https://sourceforge.net/p/gnuplot/gnuplot-main/ci/b78cc829a18e9436daaa859c96f3970157f3171e/]
+Signed-off-by: Zhang Peng <peng.zhang1...@windriver.com>
+---
+ src/mouse.c | 19 +++++++++----------
+ 1 file changed, 9 insertions(+), 10 deletions(-)
+
+diff --git a/src/mouse.c b/src/mouse.c
+index ef8f14d71..1571144ce 100644
+--- a/src/mouse.c
++++ b/src/mouse.c
+@@ -168,7 +168,7 @@ static void alert(void);
+ static void MousePosToGraphPosReal(int xx, int yy, double *x, double *y, 
double *x2, double *y2);
+ static char *xy_format(void);
+ static char *zoombox_format(void);
+-static char *GetAnnotateString(char *s, double x, double y, int mode, char 
*fmt);
++static char *GetAnnotateString(char *s, size_t len, double x, double y, int 
mode, char *fmt);
+ static char *xDateTimeFormat(double x, char *b, int mode);
+ static void GetRulerString(char *p, double x, double y);
+ static void apply_zoom(struct t_zoom * z);
+@@ -418,7 +418,7 @@ zoombox_format()
+ /* formats the information for an annotation (middle mouse button clicked)
+  */
+ static char *
+-GetAnnotateString(char *s, double x, double y, int mode, char *fmt)
++GetAnnotateString(char *s, size_t len, double x, double y, int mode, char 
*fmt)
+ {
+     if (axis_array[FIRST_X_AXIS].datatype == DT_DMS
+     ||  axis_array[FIRST_Y_AXIS].datatype == DT_DMS) {
+@@ -473,11 +473,11 @@ GetAnnotateString(char *s, double x, double y, int mode, 
char *fmt)
+           r = rmin + x/cos(phi);
+ 
+       if (fmt)
+-          sprintf(s, fmt, theta, r);
++          snprintf(s, len, fmt, theta, r);
+       else
+           sprintf(s, "theta: %.1f%s  r: %g", theta, degree_sign, r);
+     } else if ((mode == MOUSE_COORDINATES_ALT) && fmt) {
+-      sprintf(s, fmt, x, y);  /* user defined format */
++      snprintf(s, len, fmt, x, y);    /* user defined format */
+     } else if (mode == MOUSE_COORDINATES_FUNCTION) {
+       /* EXPERIMENTAL !!! */
+       t_value original_x, original_y;
+@@ -500,7 +500,7 @@ GetAnnotateString(char *s, double x, double y, int mode, 
char *fmt)
+       gpfree_string(&readout);
+     } else {
+       /* Default format ("set mouse mouseformat" is not active) */
+-      sprintf(s, xy_format(), x, y);  /* usual x,y values */
++      snprintf(s, len, xy_format(), x, y);    /* usual x,y values */
+     }
+     return s + strlen(s);
+ }
+@@ -886,10 +886,10 @@ UpdateStatuslineWithMouseSetting(mouse_setting_t * ms)
+       strcat(format, ms->fmt);
+       strcat(format, ", ");
+       strcat(format, ms->fmt);
+-      sprintf(s0, format, surface_rot_x, surface_rot_z, surface_scale, 
surface_zscale);
++      snprintf(s0, 255, format, surface_rot_x, surface_rot_z, surface_scale, 
surface_zscale);
+     } else if (!TICS_ON(axis_array[SECOND_X_AXIS].ticmode) && 
!TICS_ON(axis_array[SECOND_Y_AXIS].ticmode)) {
+       /* only first X and Y axis are in use */
+-      sp = GetAnnotateString(s0, real_x, real_y, mouse_mode, 
mouse_alt_string);
++      sp = GetAnnotateString(s0, 255, real_x, real_y, mouse_mode, 
mouse_alt_string);
+       if (ruler.on)
+           GetRulerString(sp, real_x, real_y);
+     } else {
+@@ -2116,7 +2116,7 @@ event_buttonrelease(struct gp_event_t *ge)
+            * only place, if the user didn't drag (rotate) the plot */
+ 
+           if (!is_3d_plot || !motion) {
+-              GetAnnotateString(s0, real_x, real_y, mouse_mode, 
mouse_alt_string);
++              GetAnnotateString(s0, 255, real_x, real_y, mouse_mode, 
mouse_alt_string);
+               term->set_clipboard(s0);
+               if (display_ipc_commands()) {
+                   fprintf(stderr, "put `%s' to clipboard.\n", s0);
+@@ -2129,8 +2129,7 @@ event_buttonrelease(struct gp_event_t *ge)
+            * only done if the user didn't drag (scale) the plot */
+ 
+           if (!is_3d_plot || !motion) {
+-
+-              GetAnnotateString(s0, real_x, real_y, mouse_mode, 
mouse_alt_string);
++              GetAnnotateString(s0, 255, real_x, real_y, mouse_mode, 
mouse_alt_string);
+               if (mouse_setting.label) {
+                   if (modifier_mask & Mod_Ctrl) {
+                       remove_label(mouse_x, mouse_y);
+-- 
+2.43.0
+
diff --git a/meta-oe/recipes-extended/gnuplot/gnuplot_5.4.3.bb 
b/meta-oe/recipes-extended/gnuplot/gnuplot_5.4.3.bb
index 18f98aa503..7dfe4b6657 100644
--- a/meta-oe/recipes-extended/gnuplot/gnuplot_5.4.3.bb
+++ b/meta-oe/recipes-extended/gnuplot/gnuplot_5.4.3.bb
@@ -18,6 +18,7 @@ SRC_URI = 
"${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}/${PV}/${BP}.tar.gz;name=a
            file://CVE-2025-3359.patch \
            file://CVE-2025-31176.patch \
            file://CVE-2025-31177.patch \
+           file://CVE-2025-31178.patch \
            "
 SRC_URI:append:class-target = " \
     file://0002-do-not-build-demos.patch \
-- 
2.50.0

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#119172): 
https://lists.openembedded.org/g/openembedded-devel/message/119172
Mute This Topic: https://lists.openembedded.org/mt/115022657/21656
Group Owner: openembedded-devel+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to