cmake: fix CVE-2025-9301

Reference:
https://nvd.nist.gov/vuln/detail/CVE-2025-9301
https://gitlab.kitware.com/cmake/cmake/-/issues/27135

Upstream-patch:
37e27f71bc

(From OE-Core rev: d31b2201bba808ec82c8d88df25b1106c588720e)

Signed-off-by: Saravanan <saravanan.kadambathursubramaniyam@windriver.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Saravanan 2025-10-16 19:37:58 +05:30 committed by Richard Purdie
parent 2111e3d4af
commit 6f85697140
2 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,71 @@
From 37e27f71bc356d880c908040cd0cb68fa2c371b8 Mon Sep 17 00:00:00 2001
From: Tyler Yankee <tyler.yankee@kitware.com>
Date: Wed, 13 Aug 2025 15:22:28 -0400
Subject: [PATCH] foreach: Explicitly skip replay without iterations
As written, foreach loops with a trailing `IN` (i.e., no loop
variable(s) given) lead to an assertion error. Handle this case by
exiting early when we know the loop won't execute anything.
Fixes: #27135
CVE: CVE-2025-9301
Upstream-Status: Backport
https://gitlab.kitware.com/cmake/cmake/-/commit/37e27f71bc356d880c908040cd0cb68fa2c371b8
Signed-off-by: Tyler Yankee <tyler.yankee@kitware.com>
Signed-off-by: Saravanan <saravanan.kadambathursubramaniyam@windriver.com>
---
Source/cmForEachCommand.cxx | 3 +++
Tests/RunCMake/foreach/RunCMakeTest.cmake | 1 +
Tests/RunCMake/foreach/TrailingIn-result.txt | 1 +
Tests/RunCMake/foreach/TrailingIn.cmake | 5 +++++
4 files changed, 10 insertions(+)
create mode 100644 Tests/RunCMake/foreach/TrailingIn-result.txt
create mode 100644 Tests/RunCMake/foreach/TrailingIn.cmake
diff --git a/Source/cmForEachCommand.cxx b/Source/cmForEachCommand.cxx
index 96867e26..8b741183 100644
--- a/Source/cmForEachCommand.cxx
+++ b/Source/cmForEachCommand.cxx
@@ -100,6 +100,9 @@ bool cmForEachFunctionBlocker::ArgumentsMatch(cmListFileFunction const& lff,
bool cmForEachFunctionBlocker::Replay(
std::vector<cmListFileFunction> functions, cmExecutionStatus& inStatus)
{
+ if (this->Args.size() == this->IterationVarsCount) {
+ return true;
+ }
return this->ZipLists ? this->ReplayZipLists(functions, inStatus)
: this->ReplayItems(functions, inStatus);
}
diff --git a/Tests/RunCMake/foreach/RunCMakeTest.cmake b/Tests/RunCMake/foreach/RunCMakeTest.cmake
index 15ca4770..acfc742e 100644
--- a/Tests/RunCMake/foreach/RunCMakeTest.cmake
+++ b/Tests/RunCMake/foreach/RunCMakeTest.cmake
@@ -22,3 +22,4 @@ run_cmake(foreach-RANGE-invalid-test)
run_cmake(foreach-RANGE-out-of-range-test)
run_cmake(foreach-var-scope-CMP0124-OLD)
run_cmake(foreach-var-scope-CMP0124-NEW)
+run_cmake(TrailingIn)
diff --git a/Tests/RunCMake/foreach/TrailingIn-result.txt b/Tests/RunCMake/foreach/TrailingIn-result.txt
new file mode 100644
index 00000000..573541ac
--- /dev/null
+++ b/Tests/RunCMake/foreach/TrailingIn-result.txt
@@ -0,0 +1 @@
+0
diff --git a/Tests/RunCMake/foreach/TrailingIn.cmake b/Tests/RunCMake/foreach/TrailingIn.cmake
new file mode 100644
index 00000000..e2b5b2f2
--- /dev/null
+++ b/Tests/RunCMake/foreach/TrailingIn.cmake
@@ -0,0 +1,5 @@
+foreach(v IN)
+endforeach()
+
+foreach(v1 v2 IN)
+endforeach()
--
2.48.1

View File

@ -11,6 +11,8 @@ SRC_URI:append:class-nativesdk = " \
file://environment.d-cmake.sh \
"
SRC_URI += "file://CVE-2025-9301.patch"
LICENSE:append = " & BSD-1-Clause & MIT"
LIC_FILES_CHKSUM:append = " \
file://Utilities/cmjsoncpp/LICENSE;md5=5d73c165a0f9e86a1342f32d19ec5926 \