diff --git a/meta-oe/recipes-support/freeipmi/freeipmi/CVE-2026-85504.patch b/meta-oe/recipes-support/freeipmi/freeipmi/CVE-2026-85504.patch new file mode 100644 index 0000000000..49c4d0cdaf --- /dev/null +++ b/meta-oe/recipes-support/freeipmi/freeipmi/CVE-2026-85504.patch @@ -0,0 +1,93 @@ +From 23bdae46ad532196ccd8a85d8a5c771e2aea1339 Mon Sep 17 00:00:00 2001 +From: Albert L Chu +Date: Tue, 25 Aug 2026 11:40:41 -0700 +Subject: [PATCH] libfreeipmi: bound Fujitsu SEL long-text responses + +Reject short and oversized Fujitsu iRMC responses and cap each text chunk before copying it into the fixed-size output buffer. + +Assisted-by: Codex, GPT-5.6-SOL +(cherry picked from commit 29fa34264e1eff685dcb9e0176e1eea0a6788e59) + +CVE: CVE-2026-85504 +Upstream-Status: Backport [https://cgit.git.savannah.gnu.org/cgit/freeipmi.git/commit/?h=freeipmi-1-6-19&id=29fa34264e1eff685dcb9e0176e1eea0a6788e59] + +Dropped changes to the ChangeLog file. + +Signed-off-by: Ankur Tyagi +--- + .../sel/ipmi-sel-string-fujitsu-irmc-common.c | 41 +++++++++++-------- + 1 file changed, 24 insertions(+), 17 deletions(-) + +diff --git a/libfreeipmi/sel/ipmi-sel-string-fujitsu-irmc-common.c b/libfreeipmi/sel/ipmi-sel-string-fujitsu-irmc-common.c +index f514a56c5..24aa94fb7 100644 +--- a/libfreeipmi/sel/ipmi-sel-string-fujitsu-irmc-common.c ++++ b/libfreeipmi/sel/ipmi-sel-string-fujitsu-irmc-common.c +@@ -80,10 +80,10 @@ _ipmi_sel_oem_fujitsu_get_sel_entry_long_text (ipmi_sel_ctx_t ctx, + uint8_t severity = 0; + char data_buf[IPMI_OEM_FUJITSU_SEL_ENTRY_LONG_TEXT_MAX_DATA_LENGTH + 1]; + char string_buf[IPMI_OEM_FUJITSU_SEL_ENTRY_LONG_TEXT_MAX_STRING_LENGTH + 1]; +- uint8_t data_length; ++ unsigned int data_length; + uint8_t max_read_length; +- uint8_t offset = 0; +- uint8_t component_length = 0; ++ unsigned int offset = 0; ++ size_t component_length = 0; + const char *css_str = NULL; + const char *severity_str = NULL; + int rv = -1; +@@ -208,8 +208,10 @@ _ipmi_sel_oem_fujitsu_get_sel_entry_long_text (ipmi_sel_ctx_t ctx, + "[Fujitsu OEM decoding requires administrator privilege]"); + goto out; + } +- goto cleanup; + } ++ ++ SEL_SET_ERRNUM (ctx, IPMI_SEL_ERR_IPMI_ERROR); ++ goto cleanup; + } + + /* Get severity and CSS flag only once */ +@@ -224,24 +226,29 @@ _ipmi_sel_oem_fujitsu_get_sel_entry_long_text (ipmi_sel_ctx_t ctx, + + data_length = bytes_rs[15]; + ++ if (data_length > IPMI_OEM_FUJITSU_SEL_ENTRY_LONG_TEXT_MAX_DATA_LENGTH ++ || offset > data_length) ++ { ++ SEL_SET_ERRNUM (ctx, IPMI_SEL_ERR_IPMI_ERROR); ++ goto cleanup; ++ } ++ + bytes_rs[rs_len-1] = '\0'; /* just to be sure it's terminated */ + component_length = strlen ((char *)bytes_rs + 16); + +- /* achu: truncate if there is overflow */ +- if (offset + component_length > data_length) +- { +- memcpy (data_buf + offset, +- &bytes_rs[16], +- IPMI_OEM_FUJITSU_SEL_ENTRY_LONG_TEXT_MAX_DATA_LENGTH - offset); +- offset = data_length; +- } +- else ++ if (component_length > (data_length - offset)) ++ component_length = data_length - offset; ++ ++ if (!component_length && offset < data_length) + { +- memcpy (data_buf + offset, +- &bytes_rs[16], +- component_length); +- offset += component_length; ++ SEL_SET_ERRNUM (ctx, IPMI_SEL_ERR_IPMI_ERROR); ++ goto cleanup; + } ++ ++ memcpy (data_buf + offset, ++ &bytes_rs[16], ++ component_length); ++ offset += component_length; + } + + if (css == IPMI_OEM_FUJITSU_CSS_COMPONENT) diff --git a/meta-oe/recipes-support/freeipmi/freeipmi_1.6.17.bb b/meta-oe/recipes-support/freeipmi/freeipmi_1.6.17.bb index a3a5fb5af0..aea282803a 100644 --- a/meta-oe/recipes-support/freeipmi/freeipmi_1.6.17.bb +++ b/meta-oe/recipes-support/freeipmi/freeipmi_1.6.17.bb @@ -21,6 +21,7 @@ SRC_URI = "${GNU_MIRROR}/freeipmi/freeipmi-${PV}.tar.gz \ file://CVE-2026-85507.patch \ file://CVE-2026-85506.patch \ file://CVE-2026-85505.patch \ + file://CVE-2026-85504.patch \ " SRC_URI[sha256sum] = "16783d10faa28847a795cce0bf86deeaa72b8fbe71d1f0dc1101d13a6b501ec1"