Commit d9fdbf48 authored by Russ Cox's avatar Russ Cox

runtime: guard against array out of bounds in GoroutineProfile

The previous CL is the real fix. This one is just insurance.

Fixes #14046 again.

Change-Id: I553349504bb1789e4b66c888dbe4034568918ad6
Reviewed-on: https://go-review.googlesource.com/18977Reviewed-by: default avatarAustin Clements <austin@google.com>
parent 313fd1cb
...@@ -554,6 +554,11 @@ func GoroutineProfile(p []StackRecord) (n int, ok bool) { ...@@ -554,6 +554,11 @@ func GoroutineProfile(p []StackRecord) (n int, ok bool) {
// Save other goroutines. // Save other goroutines.
for _, gp1 := range allgs { for _, gp1 := range allgs {
if isOK(gp1) { if isOK(gp1) {
if len(r) == 0 {
// Should be impossible, but better to return a
// truncated profile than to crash the entire process.
break
}
saveg(^uintptr(0), ^uintptr(0), gp1, &r[0]) saveg(^uintptr(0), ^uintptr(0), gp1, &r[0])
r = r[1:] r = r[1:]
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment