File fix-buffer-overflow-2c7797.patch of Package capstone.42054
From ed4c30c3385c4071737831f1b61788add040f4dc Mon Sep 17 00:00:00 2001
From: Rot127 <45763064+Rot127@users.noreply.github.com>
Date: Wed, 17 Dec 2025 14:01:10 +0000
Subject: [PATCH] Merge commit from fork
* Check return value of cs_vsnprintf for negative values.
This prevents underflow of SStream.index.
This bug was reported by Github user Finder16.
* Add overflow check before adding cs_vsnprintf return value.
[DF: Removed the test related hunks;]
(cherry picked from commit 2c7797182a1618be12017d7d41e0b6581d5d529e)
* Introduce the macro SSTREAM_OVERFLOW_CHECK
(cherry picked from commit af1ed2fb3d9d67926389a71e12531bef76f50482)
References: bsc#1255310 (CVE-2025-68114)
Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
---
SStream.c | 4 ++++
SStream.h | 12 +++++++++++-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/SStream.c b/SStream.c
index 5ae237fd..a4224835 100644
--- a/SStream.c
+++ b/SStream.c
@@ -48,6 +48,10 @@ void SStream_concat(SStream *ss, const char *fmt, ...)
va_start(ap, fmt);
ret = cs_vsnprintf(ss->buffer + ss->index, sizeof(ss->buffer) - (ss->index + 1), fmt, ap);
va_end(ap);
+ if (ret < 0) {
+ return;
+ }
+ SSTREAM_OVERFLOW_CHECK(ss, ret);
ss->index += ret;
#endif
}
diff --git a/SStream.h b/SStream.h
index 3473085d..1869978d 100644
--- a/SStream.h
+++ b/SStream.h
@@ -6,11 +6,21 @@
#include "include/capstone/platform.h"
+#define SSTREAM_BUF_LEN 512
+
typedef struct SStream {
- char buffer[512];
+ char buffer[SSTREAM_BUF_LEN];
int index;
} SStream;
+#define SSTREAM_OVERFLOW_CHECK(OS, len) \
+do { \
+ if (OS->index + len + 1 > SSTREAM_BUF_LEN) { \
+ fprintf(stderr, "Buffer overflow caught!\n"); \
+ return; \
+ } \
+} while(0)
+
void SStream_Init(SStream *ss);
void SStream_concat(SStream *ss, const char *fmt, ...);
--
2.52.0