diff options
| author | Keith Randall <khr@golang.org> | 2014-09-20 23:31:11 -0700 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2014-09-20 23:31:11 -0700 |
| commit | 3b2577ced39194fdd2f1359136c7e176d8de5576 (patch) | |
| tree | 1e657416d7a008a39f9daf966bd580b307272759 /src/runtime/runtime_test.go | |
| parent | 0306478fe57767530164b43c12969ca91496db47 (diff) | |
| download | go-3b2577ced39194fdd2f1359136c7e176d8de5576.tar.xz | |
runtime: be very careful with bad pointer tests
Saw this on a test:
runtime: bad pointer in frame runtime_test.testSetPanicOnFault at 0xc20801c6b0: 0xfff
fatal error: bad pointer!
runtime stack:
...
copystack(0xc2081bf7a0, 0x1000)
/root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/stack.c:621 +0x173 fp=0xfffffd7ffd5ffee0 sp=0xfffffd7ffd5ffe20
runtime.newstack()
/root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/stack.c:774 +0x552 fp=0xfffffd7ffd5fff90 sp=0xfffffd7ffd5ffee0
runtime.morestack()
/root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/asm_amd64.s:324 +0x90 fp=0xfffffd7ffd5fff98 sp=0xfffffd7ffd5fff90
goroutine 163354 [stack growth]:
...
runtime.convT2E(0x587000, 0xc20807bea8, 0x0, 0x0)
/root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/iface.go:141 +0xd2 fp=0xc20801c678 sp=0xc20801c640
runtime_test.testSetPanicOnFault(0xc20822c510, 0xfff, 0xc20801c748)
/root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/runtime_test.go:211 +0xc6 fp=0xc20801c718 sp=0xc20801c678
...
This test is testing bad pointers. It loads the bad pointer into a pointer variable,
but before it gets a chance to dereference it, calls convT2E. That call causes a stack copy,
which exposes that live but bad pointer variable.
LGTM=dvyukov
R=golang-codereviews, dvyukov
CC=golang-codereviews
https://golang.org/cl/146880043
Diffstat (limited to 'src/runtime/runtime_test.go')
| -rw-r--r-- | src/runtime/runtime_test.go | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/runtime/runtime_test.go b/src/runtime/runtime_test.go index 3c4075842b..1688364a8e 100644 --- a/src/runtime/runtime_test.go +++ b/src/runtime/runtime_test.go @@ -206,9 +206,8 @@ func testSetPanicOnFault(t *testing.T, addr uintptr, nfault *int) { // addresses that have had C or kernel pages mapped there // readable by user code. So just log the content. // If no addresses fault, we'll fail the test. - var p *int - p = (*int)(unsafe.Pointer(addr)) - t.Logf("addr %#x: %#x\n", addr, *p) + v := *(*byte)(unsafe.Pointer(addr)) + t.Logf("addr %#x: %#x\n", addr, v) } func eqstring_generic(s1, s2 string) bool { |
