mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: fix possible nil deref added in CL 270943
In the event allocSpan returned a nil, this would crash. Cleaned up the code and comments slightly, too. Change-Id: I6231d4b4c14218e6956b4a97a205adc3206f59ec Reviewed-on: https://go-review.googlesource.com/c/go/+/316429 Trust: David Chase <drchase@google.com> Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
parent
7f9febd4a1
commit
8a4b7294af
1 changed files with 10 additions and 8 deletions
|
|
@ -897,7 +897,8 @@ func (s spanAllocType) manual() bool {
|
||||||
// spanclass indicates the span's size class and scannability.
|
// spanclass indicates the span's size class and scannability.
|
||||||
//
|
//
|
||||||
// If needzero is true, the memory for the returned span will be zeroed.
|
// If needzero is true, the memory for the returned span will be zeroed.
|
||||||
// The boolean returned indicates whether the returned span is zeroed.
|
// The boolean returned indicates whether the returned span contains zeroes,
|
||||||
|
// either because this was requested, or because it was already zeroed.
|
||||||
func (h *mheap) alloc(npages uintptr, spanclass spanClass, needzero bool) (*mspan, bool) {
|
func (h *mheap) alloc(npages uintptr, spanclass spanClass, needzero bool) (*mspan, bool) {
|
||||||
// Don't do any operations that lock the heap on the G stack.
|
// Don't do any operations that lock the heap on the G stack.
|
||||||
// It might trigger stack growth, and the stack growth code needs
|
// It might trigger stack growth, and the stack growth code needs
|
||||||
|
|
@ -912,14 +913,15 @@ func (h *mheap) alloc(npages uintptr, spanclass spanClass, needzero bool) (*mspa
|
||||||
s = h.allocSpan(npages, spanAllocHeap, spanclass)
|
s = h.allocSpan(npages, spanAllocHeap, spanclass)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if s == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
isZeroed := s.needzero == 0
|
isZeroed := s.needzero == 0
|
||||||
if s != nil {
|
if needzero && !isZeroed {
|
||||||
if needzero && s.needzero != 0 {
|
|
||||||
memclrNoHeapPointers(unsafe.Pointer(s.base()), s.npages<<_PageShift)
|
memclrNoHeapPointers(unsafe.Pointer(s.base()), s.npages<<_PageShift)
|
||||||
isZeroed = true
|
isZeroed = true
|
||||||
}
|
}
|
||||||
s.needzero = 0
|
s.needzero = 0
|
||||||
}
|
|
||||||
return s, isZeroed
|
return s, isZeroed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue