From 4bcf94b0232db65ed5df47e0127cdbc8866aec64 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Tue, 11 Oct 2022 11:56:51 +0700 Subject: all: prevent fakePC overflow on 386 in libfuzzer mode fakePC uses hash.Sum32, which returns an uint32. However, libfuzzer trace/hook functions declare fakePC argument as int, causing overflow on 386 archs. Fixing this by changing fakePC argument to uint to prevent the overflow. Fixes #56141 Change-Id: I3994c461319983ab70065f90bf61539a363e0a2a Reviewed-on: https://go-review.googlesource.com/c/go/+/441996 Auto-Submit: Cuong Manh Le Reviewed-by: Keith Randall Run-TryBot: Cuong Manh Le TryBot-Result: Gopher Robot Reviewed-by: Matthew Dempsky --- src/runtime/libfuzzer.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/runtime') diff --git a/src/runtime/libfuzzer.go b/src/runtime/libfuzzer.go index 6bfaef823b..013e7165b2 100644 --- a/src/runtime/libfuzzer.go +++ b/src/runtime/libfuzzer.go @@ -20,49 +20,49 @@ const retSledSize = 512 // This may result in these functions having callers that are nosplit. That is why they must be nosplit. // //go:nosplit -func libfuzzerTraceCmp1(arg0, arg1 uint8, fakePC int) { +func libfuzzerTraceCmp1(arg0, arg1 uint8, fakePC uint) { fakePC = fakePC % retSledSize libfuzzerCallTraceIntCmp(&__sanitizer_cov_trace_cmp1, uintptr(arg0), uintptr(arg1), uintptr(fakePC)) } //go:nosplit -func libfuzzerTraceCmp2(arg0, arg1 uint16, fakePC int) { +func libfuzzerTraceCmp2(arg0, arg1 uint16, fakePC uint) { fakePC = fakePC % retSledSize libfuzzerCallTraceIntCmp(&__sanitizer_cov_trace_cmp2, uintptr(arg0), uintptr(arg1), uintptr(fakePC)) } //go:nosplit -func libfuzzerTraceCmp4(arg0, arg1 uint32, fakePC int) { +func libfuzzerTraceCmp4(arg0, arg1 uint32, fakePC uint) { fakePC = fakePC % retSledSize libfuzzerCallTraceIntCmp(&__sanitizer_cov_trace_cmp4, uintptr(arg0), uintptr(arg1), uintptr(fakePC)) } //go:nosplit -func libfuzzerTraceCmp8(arg0, arg1 uint64, fakePC int) { +func libfuzzerTraceCmp8(arg0, arg1 uint64, fakePC uint) { fakePC = fakePC % retSledSize libfuzzerCallTraceIntCmp(&__sanitizer_cov_trace_cmp8, uintptr(arg0), uintptr(arg1), uintptr(fakePC)) } //go:nosplit -func libfuzzerTraceConstCmp1(arg0, arg1 uint8, fakePC int) { +func libfuzzerTraceConstCmp1(arg0, arg1 uint8, fakePC uint) { fakePC = fakePC % retSledSize libfuzzerCallTraceIntCmp(&__sanitizer_cov_trace_const_cmp1, uintptr(arg0), uintptr(arg1), uintptr(fakePC)) } //go:nosplit -func libfuzzerTraceConstCmp2(arg0, arg1 uint16, fakePC int) { +func libfuzzerTraceConstCmp2(arg0, arg1 uint16, fakePC uint) { fakePC = fakePC % retSledSize libfuzzerCallTraceIntCmp(&__sanitizer_cov_trace_const_cmp2, uintptr(arg0), uintptr(arg1), uintptr(fakePC)) } //go:nosplit -func libfuzzerTraceConstCmp4(arg0, arg1 uint32, fakePC int) { +func libfuzzerTraceConstCmp4(arg0, arg1 uint32, fakePC uint) { fakePC = fakePC % retSledSize libfuzzerCallTraceIntCmp(&__sanitizer_cov_trace_const_cmp4, uintptr(arg0), uintptr(arg1), uintptr(fakePC)) } //go:nosplit -func libfuzzerTraceConstCmp8(arg0, arg1 uint64, fakePC int) { +func libfuzzerTraceConstCmp8(arg0, arg1 uint64, fakePC uint) { fakePC = fakePC % retSledSize libfuzzerCallTraceIntCmp(&__sanitizer_cov_trace_const_cmp8, uintptr(arg0), uintptr(arg1), uintptr(fakePC)) } -- cgit v1.3-5-g9baa