authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-09-09 21:16:06-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-09-11 13:41:29-07:00
log2d005827b874f27535cda72c80b6558d9d4cd30c
tree9080004df76b836ff98416e1779bdcd85677ffd9
parent0cdccff51912359b7ec5afa57fbbd5bb69d8f3a2

make lowest stack an internal libfuzzer detail

This value is useful to help determine run uniqueness in the face of recursion, however it is not valuable to expose to the fuzzing UI.

6 files changed, 3 insertions(+), 17 deletions(-)

lib/fuzzer.zig+3-3
......@@ -28,7 +28,8 @@ fn logOverride(
2828 f.writer().print(prefix1 ++ prefix2 ++ format ++ "\n", args) catch @panic("failed to write to fuzzer log");
2929}
3030
31export threadlocal var __sancov_lowest_stack: usize = std.math.maxInt(usize);
31/// Helps determine run uniqueness in the face of recursion.
32export threadlocal var __sancov_lowest_stack: usize = 0;
3233
3334export fn __sanitizer_cov_trace_const_cmp1(arg1: u8, arg2: u8) void {
3435 handleCmp(@returnAddress(), arg1, arg2);
......@@ -220,7 +221,6 @@ const Fuzzer = struct {
220221 .n_runs = 0,
221222 .unique_runs = 0,
222223 .pcs_len = pcs.len,
223 .lowest_stack = std.math.maxInt(usize),
224224 };
225225 f.seen_pcs.appendSliceAssumeCapacity(std.mem.asBytes(&header));
226226 f.seen_pcs.appendNTimesAssumeCapacity(0, n_bitset_elems * @sizeOf(usize));
......@@ -261,8 +261,8 @@ const Fuzzer = struct {
261261 f.input.appendSliceAssumeCapacity(run.input);
262262 try f.mutate();
263263
264 _ = @atomicRmw(usize, &header.lowest_stack, .Min, __sancov_lowest_stack, .monotonic);
265264 @memset(f.pc_counters, 0);
265 __sancov_lowest_stack = std.math.maxInt(usize);
266266 f.coverage.reset();
267267
268268 fuzzer_one(f.input.items.ptr, f.input.items.len);
lib/fuzzer/web/index.html-1
......@@ -147,7 +147,6 @@
147147 <li>Total Runs: <span id="statTotalRuns"></span></li>
148148 <li>Unique Runs: <span id="statUniqueRuns"></span></li>
149149 <li>Coverage: <span id="statCoverage"></span></li>
150 <li>Lowest Stack: <span id="statLowestStack"></span></li>
151150 <li>Entry Points: <ul id="entryPointsList"></ul></li>
152151 </ul>
153152 </div>
lib/fuzzer/web/main.js-2
......@@ -6,7 +6,6 @@
66 const domStatTotalRuns = document.getElementById("statTotalRuns");
77 const domStatUniqueRuns = document.getElementById("statUniqueRuns");
88 const domStatCoverage = document.getElementById("statCoverage");
9 const domStatLowestStack = document.getElementById("statLowestStack");
109 const domEntryPointsList = document.getElementById("entryPointsList");
1110
1211 let wasm_promise = fetch("main.wasm");
......@@ -158,7 +157,6 @@
158157 domStatTotalRuns.innerText = totalRuns;
159158 domStatUniqueRuns.innerText = uniqueRuns + " (" + percent(uniqueRuns, totalRuns) + "%)";
160159 domStatCoverage.innerText = coveredSourceLocations + " / " + totalSourceLocations + " (" + percent(coveredSourceLocations, totalSourceLocations) + "%)";
161 domStatLowestStack.innerText = unwrapString(wasm_exports.lowestStack());
162160
163161 const entryPoints = unwrapInt32Array(wasm_exports.entryPoints());
164162 resizeDomList(domEntryPointsList, entryPoints.length, "<li></li>");
lib/fuzzer/web/main.zig-7
......@@ -106,13 +106,6 @@ export fn decl_source_html(decl_index: Decl.Index) String {
106106 return String.init(string_result.items);
107107}
108108
109export fn lowestStack() String {
110 const header: *abi.CoverageUpdateHeader = @ptrCast(recent_coverage_update.items[0..@sizeOf(abi.CoverageUpdateHeader)]);
111 string_result.clearRetainingCapacity();
112 string_result.writer(gpa).print("0x{d}", .{header.lowest_stack}) catch @panic("OOM");
113 return String.init(string_result.items);
114}
115
116109export fn totalSourceLocations() usize {
117110 return coverage_source_locations.items.len;
118111}
lib/std/Build/Fuzz/WebServer.zig-2
......@@ -406,7 +406,6 @@ fn sendCoverageContext(
406406 const seen_pcs = cov_header.seenBits();
407407 const n_runs = @atomicLoad(usize, &cov_header.n_runs, .monotonic);
408408 const unique_runs = @atomicLoad(usize, &cov_header.unique_runs, .monotonic);
409 const lowest_stack = @atomicLoad(usize, &cov_header.lowest_stack, .monotonic);
410409 if (prev_unique_runs.* != unique_runs) {
411410 // There has been an update.
412411 if (prev_unique_runs.* == 0) {
......@@ -431,7 +430,6 @@ fn sendCoverageContext(
431430 const header: abi.CoverageUpdateHeader = .{
432431 .n_runs = n_runs,
433432 .unique_runs = unique_runs,
434 .lowest_stack = lowest_stack,
435433 };
436434 const iovecs: [2]std.posix.iovec_const = .{
437435 makeIov(std.mem.asBytes(&header)),
lib/std/Build/Fuzz/abi.zig-2
......@@ -13,7 +13,6 @@ pub const SeenPcsHeader = extern struct {
1313 n_runs: usize,
1414 unique_runs: usize,
1515 pcs_len: usize,
16 lowest_stack: usize,
1716
1817 /// Used for comptime assertions. Provides a mechanism for strategically
1918 /// causing compile errors.
......@@ -79,7 +78,6 @@ pub const CoverageUpdateHeader = extern struct {
7978 flags: Flags = .{},
8079 n_runs: u64,
8180 unique_runs: u64,
82 lowest_stack: u64,
8381
8482 pub const Flags = packed struct(u64) {
8583 tag: ToClientTag = .coverage_update,