CVE-2026-113344
Overview
Changed Functions
| Function | Change | Notes |
|---|---|---|
TEST_Ftest/unittests/flags/flag-definitions-unittest.cc |
modified |
Files Changed
test/unittests/flags/flag-definitions-unittest.ccsrc/flags/flag-definitions.hsrc/profiler/cpu-profiler.cc
Patch
From 549d3c92d6ee6a45176d26184b772e5233450706 Mon Sep 17 00:00:00 2001
From: Simon Zünd <szuend@chromium.org>
Date: Thu, 17 Sep 2026 05:36:52 +0000
Subject: [PATCH] [profiler] Reject negative --cpu-profiler-sampling-interval values
Change cpu_profiler_sampling_interval from DEFINE_INT to DEFINE_UINT so
negative values passed on the command line are rejected by
TryParseUnsigned and the default sampling interval (1000us) is preserved
instead of triggering a DCHECK in CpuProfile::CheckSubsample.
Also add a DCHECK_GE in CpuProfiler::set_sampling_interval to catch any
internal callers passing negative TimeDeltas.
TAG=agy
CONV=3fcd8b38-1a75-4f2a-b6f0-de9220fcc36a
Fixed: 561926123
Change-Id: If536c94c0f652f7931605ac8dfe2f3542762e4ea
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/8423899
Reviewed-by: Camillo Bruni <cbruni@chromium.org>
Commit-Queue: Simon Zünd <szuend@chromium.org>
Cr-Commit-Position: refs/heads/main@{#109923}
---
diff --git a/src/flags/flag-definitions.h b/src/flags/flag-definitions.h
index 6150a19..547b857 100644
--- a/src/flags/flag-definitions.h
+++ b/src/flags/flag-definitions.h
@@ -3190,8 +3190,8 @@
DEFINE_IMPLICATION(parallel_compile_tasks_for_lazy, lazy_compile_dispatcher)
// cpu-profiler.cc
-DEFINE_INT(cpu_profiler_sampling_interval, 1000,
- "CPU profiler sampling interval in microseconds")
+DEFINE_UINT(cpu_profiler_sampling_interval, 1000,
+ "CPU profiler sampling interval in microseconds")
// debugger
DEFINE_BOOL(simulator_debugger, false,
diff --git a/src/profiler/cpu-profiler.cc b/src/profiler/cpu-profiler.cc
index 5c3955f..0204463 100644
--- a/src/profiler/cpu-profiler.cc
+++ b/src/profiler/cpu-profiler.cc
@@ -570,6 +570,7 @@
void CpuProfiler::set_sampling_interval(base::TimeDelta value) {
DCHECK(!is_profiling_);
+ DCHECK_GE(value, base::TimeDelta());
base_sampling_interval_ = value;
}
diff --git a/test/unittests/flags/flag-definitions-unittest.cc b/test/unittests/flags/flag-definitions-unittest.cc
index 2e06620..bfafc52 100644
--- a/test/unittests/flags/flag-definitions-unittest.cc
+++ b/test/unittests/flags/flag-definitions-unittest.cc
@@ -173,6 +173,14 @@
CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str)));
}
+TEST_F(FlagDefinitionsTest, RejectNegativeUnsignedFlagAndKeepDefault) {
+ int argc = 2;
+ const char* argv[] = {"Test", "--cpu-profiler-sampling-interval=-100"};
+ CHECK_EQ(1, FlagList::SetFlagsFromCommandLine(&argc, const_cast<char**>(argv),
+ true));
+ CHECK_EQ(1000u, v8_flags.cpu_profiler_sampling_interval.value());
+}
+
TEST_F(FlagDefinitionsTest, FlagsRemoveIncomplete) {
// Test that processed command line arguments are removed, even
// if the list of arguments ends unexpectedly.
Regression Test / PoC
diff --git a/test/unittests/flags/flag-definitions-unittest.cc b/test/unittests/flags/flag-definitions-unittest.cc
index 2e06620..bfafc52 100644
--- a/test/unittests/flags/flag-definitions-unittest.cc
+++ b/test/unittests/flags/flag-definitions-unittest.cc
@@ -173,6 +173,14 @@
CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str)));
}
+TEST_F(FlagDefinitionsTest, RejectNegativeUnsignedFlagAndKeepDefault) {
+ int argc = 2;
+ const char* argv[] = {"Test", "--cpu-profiler-sampling-interval=-100"};
+ CHECK_EQ(1, FlagList::SetFlagsFromCommandLine(&argc, const_cast<char**>(argv),
+ true));
+ CHECK_EQ(1000u, v8_flags.cpu_profiler_sampling_interval.value());
+}
+
TEST_F(FlagDefinitionsTest, FlagsRemoveIncomplete) {
// Test that processed command line arguments are removed, even
// if the list of arguments ends unexpectedly.
Original Bug Report
DCHECK failure in source_sampling_interval >= base::TimeDelta() in profile-generator.cc
Detailed Report: https://clusterfuzz.com/testcase?key=5475144105492480
Fuzzer: big_sleep Job Type: linux_asan_d8_bigsleep_dbg Platform Id: linux
Crash Type: DCHECK failure Crash Address: Crash State: source_sampling_interval >= base::TimeDelta() in profile-generator.cc v8::internal::CpuProfile::CheckSubsample v8::internal::CpuProfile::AddPath
Sanitizer: address (ASAN)
Crash Revision: https://clusterfuzz.com/revisions?job=linux_asan_d8_bigsleep_dbg&revision=109797
Reproducer Testcase: https://clusterfuzz.com/download?testcase_id=5475144105492480
Issue filed automatically.
To reproduce this, please build the target in this report and run it against the reproducer testcase. Please use the GN arguments provided at bottom of this report when building the binary.
If you have trouble reproducing, please also export the environment variables listed under “[Environment]” in the crash stacktrace.
If you have any feedback on reproducing test cases, let us know at https://forms.gle/Yh3qCYFveHj6E5jz5 so we can improve.