• Austin Clements's avatar
    runtime: fix gcDumpObject on non-heap pointers · 3ca20218
    Austin Clements authored
    gcDumpObject is used to print the source and destination objects when
    checkmark find a missing mark. However, gcDumpObject currently assumes
    the given pointer will point to a heap object. This is not true of the
    source object during root marking and may not even be true of the
    destination object in the limited situations where the heap points
    back in to the stack.
    
    If the pointer isn't a heap object, gcDumpObject will attempt an
    out-of-bounds access to h_spans. This will cause a panicslice, which
    will attempt to construct a useful panic message. This will cause a
    string allocation, which will lead mallocgc to panic because the GC is
    in mark termination (checkmark only happens during mark termination).
    
    Fix this by checking that the pointer points into the heap arena
    before attempting to use it as an arena pointer.
    
    Change-Id: I09da600c380d4773f1f8f38e45b82cb229ea6382
    Reviewed-on: https://go-review.googlesource.com/9498Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    3ca20218
mgcmark.go 23.6 KB