Skip to content

gdbserver_conn: panic: runtime error: index out of range #3013

Closed
@polinasok

Description

@polinasok
  1. What version of Delve are you using (dlv version)?
Delve Debugger
Version: 1.8.3
  1. What version of Go are you using? (go version)?
go version go1.18 darwin/amd64

I got this once when testing multiple disconnect/reconnect after continue/pause actions with --accept-multiclient using _fixtures/loopprog.go.

$ /dlv attach 55265 --headless --listen=:54321 --log --accept-multiclient
API server listening at: [::]:54321
2022-05-16T10:31:38-07:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
2022-05-16T10:31:38-07:00 info layer=debugger attaching to pid 55265
2022-05-16T10:31:50-07:00 info layer=debugger created breakpoint: &api.Breakpoint{ID:1, Name:"sourceBp Path=\"/Users/polina/delve/_fixtures/loopprog.go\"  Line=8 Column=0", Addr:0x10ad063, Addrs:[]uint64{0x10ad063}, File:"/Users/polina/delve/_fixtures/loopprog.go", Line:8, FunctionName:"main.loop", Cond:"", HitCond:"", Tracepoint:true, TraceReturn:false, Goroutine:false, Stacktrace:0, Variables:[]string(nil), LoadArgs:(*api.LoadConfig)(nil), LoadLocals:(*api.LoadConfig)(nil), WatchExpr:"", WatchType:0x0, VerboseDescr:[]string(nil), HitCount:map[string]uint64{}, TotalHitCount:0x0, Disabled:false, UserData:dap.logMessage{format:"i", args:[]string(nil)}}
2022-05-16T10:31:56-07:00 debug layer=debugger continuing
2022-05-16T10:31:56-07:00 debug layer=debugger continuing (direction congruent)
2022-05-16T10:31:56-07:00 debug layer=debugger continuing (direction congruent)
...
2022-05-16T10:32:10-07:00 debug layer=debugger continuing (direction congruent)
2022-05-16T10:32:10-07:00 debug layer=debugger halting
2022-05-16T10:32:28-07:00 debug layer=debugger continuing
2022-05-16T10:32:28-07:00 debug layer=debugger continuing (direction congruent)
2022-05-16T10:32:29-07:00 debug layer=debugger continuing (direction congruent)
...
2022-05-16T10:33:01-07:00 debug layer=debugger continuing (direction congruent)
2022-05-16T10:33:01-07:00 debug layer=debugger halting
2022-05-16T10:33:01-07:00 error layer=dap recovered panic: runtime error: index out of range [8] with length 8
goroutine 425 [running]:
runtime/debug.Stack()
	/usr/local/go/src/runtime/debug/stack.go:24 +0x65
github.com/go-delve/delve/service/dap.(*Session).recoverPanic(0xc00014e000, {0x471b4a0, 0xc000243ef0})
	/Users/polina/delve/service/dap/server.go:559 +0x66
panic({0x4618bc0, 0xc000875620})
	/usr/local/go/src/runtime/panic.go:838 +0x207
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbConn).readRegister(0xc00028c2d0, {0xc000038fd0, 0x7}, 0x3?, {0xc000253c00, 0x8, 0xc00003a780?})
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver_conn.go:537 +0x289
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).reloadRegisters(0xc00028a2a0)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1641 +0x4a6
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).Registers(0xc00028a2a0)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1476 +0x25
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).SetCurrentBreakpoint(0xc00028a2a0, 0xa0?)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1870 +0x145
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbProcess).setCurrentBreakpoints(0xc00028c2c0)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1409 +0x94
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbProcess).ContinueOnce(0xc00028c2c0, 0xc00012a770?)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:886 +0x618
github.com/go-delve/delve/pkg/proc.(*Target).Continue(0xc0002940f0)
	/Users/polina/delve/pkg/proc/target_exec.go:81 +0x1b7
github.com/go-delve/delve/service/debugger.(*Debugger).Command(0xc000228160, 0xc0008f5b60, 0xc000108360)
	/Users/polina/delve/service/debugger/debugger.go:1219 +0x125c
github.com/go-delve/delve/service/dap.(*Session).resumeOnce(0xc00014e000, {0x4661c23, 0x1a}, 0xc000239560)
	/Users/polina/delve/service/dap/server.go:3445 +0x219
github.com/go-delve/delve/service/dap.(*Session).resumeOnceAndCheckStop(0xc00014e000, {0x4661c23, 0x1a}, 0xc0008f5c28?)
	/Users/polina/delve/service/dap/server.go:3587 +0x2c
github.com/go-delve/delve/service/dap.glob..func1(0x80?, {0x4661c23?, 0xc0001ba410?}, 0xb?)
	/Users/polina/delve/service/dap/server.go:3583 +0x1e
github.com/go-delve/delve/service/dap.(*Session).runUntilStop(0xc00014e000, {0x4654599, 0x8}, 0x413ee25?)
	/Users/polina/delve/service/dap/server.go:3575 +0xeb
github.com/go-delve/delve/service/dap.(*Session).runUntilStopAndNotify(0xc00014e000, {0x4654599, 0x8}, 0x0?)
	/Users/polina/delve/service/dap/server.go:3456 +0x46
github.com/go-delve/delve/service/dap.(*Session).onContinueRequest(0x0?, 0x0?, 0x0?)
	/Users/polina/delve/service/dap/server.go:1587 +0x14b
github.com/go-delve/delve/service/dap.(*Session).handleRequest.func2()
	/Users/polina/delve/service/dap/server.go:692 +0x77
created by github.com/go-delve/delve/service/dap.(*Session).handleRequest
	/Users/polina/delve/service/dap/server.go:690 +0x1a2a


2022-05-16T10:33:01-07:00 error layer=dap recovered panic: runtime error: index out of range [2] with length 2
goroutine 39 [running]:
runtime/debug.Stack()
	/usr/local/go/src/runtime/debug/stack.go:24 +0x65
github.com/go-delve/delve/service/dap.(*Session).recoverPanic(0xc00014e000, {0x471b920, 0xc0000be300})
	/Users/polina/delve/service/dap/server.go:559 +0x66
panic({0x4618bc0, 0xc0004b3aa0})
	/usr/local/go/src/runtime/panic.go:844 +0x258
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbConn).readRegister(0xc00028c2d0, {0xc000038fe7, 0x7}, 0x5?, {0xc0000d0b28, 0x2, 0x40104e7?})
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver_conn.go:537 +0x289
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).reloadRegisters(0xc00028a540)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1641 +0x4a6
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).Registers(0xc00028a540)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1476 +0x25
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).Location(0xc00028a540)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1449 +0x36
github.com/go-delve/delve/service/api.ConvertThread({0x4723930, 0xc00028a540})
	/Users/polina/delve/service/api/conversions.go:111 +0x2b
github.com/go-delve/delve/service/debugger.(*Debugger).state(0xc000228160, 0x0)
	/Users/polina/delve/service/debugger/debugger.go:612 +0x40a
github.com/go-delve/delve/service/debugger.(*Debugger).Command(0xc000228160, 0xc0002316d8, 0x0)
	/Users/polina/delve/service/debugger/debugger.go:1318 +0x15b6
github.com/go-delve/delve/service/dap.(*Session).halt(0xc00014e000)
	/Users/polina/delve/service/dap/server.go:1261 +0xd1
github.com/go-delve/delve/service/dap.(*Session).onPauseRequest(0xc00014e000, 0xc0000be300)
	/Users/polina/delve/service/dap/server.go:1919 +0xca
github.com/go-delve/delve/service/dap.(*Session).handleRequest(0xc00014e000, {0x471b920?, 0xc0000be300?})
	/Users/polina/delve/service/dap/server.go:602 +0x4c5
github.com/go-delve/delve/service/dap.(*Session).ServeDAPCodec(0xc00014e000)
	/Users/polina/delve/service/dap/server.go:545 +0x385
created by github.com/go-delve/delve/service/rpccommon.(*ServerImpl).serveConnectionDemux
	/Users/polina/delve/service/rpccommon/server.go:185 +0x34a


2022-05-16T10:33:06-07:00 error layer=dap recovered panic: runtime error: index out of range [8] with length 8
goroutine 39 [running]:
runtime/debug.Stack()
	/usr/local/go/src/runtime/debug/stack.go:24 +0x65
github.com/go-delve/delve/service/dap.(*Session).recoverPanic(0xc00014e000, {0x471b920, 0xc0001e79e0})
	/Users/polina/delve/service/dap/server.go:559 +0x66
panic({0x4618bc0, 0xc0004b3c98})
	/usr/local/go/src/runtime/panic.go:844 +0x258
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbConn).readRegister(0xc00028c2d0, {0xc000038fd7, 0x7}, 0x3?, {0xc0000d1180, 0x8, 0xc000278090?})
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver_conn.go:537 +0x289
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).reloadRegisters(0xc00028a380)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1641 +0x4a6
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).Registers(0xc00028a380)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1476 +0x25
github.com/go-delve/delve/pkg/proc/gdbserial.(*gdbThread).Location(0xc00028a380)
	/Users/polina/delve/pkg/proc/gdbserial/gdbserver.go:1449 +0x36
github.com/go-delve/delve/service/api.ConvertThread({0x4723930, 0xc00028a380})
	/Users/polina/delve/service/api/conversions.go:111 +0x2b
github.com/go-delve/delve/service/debugger.(*Debugger).state(0xc000228160, 0x0)
	/Users/polina/delve/service/debugger/debugger.go:612 +0x40a
github.com/go-delve/delve/service/debugger.(*Debugger).State(0xc000228160, 0x0)
	/Users/polina/delve/service/debugger/debugger.go:584 +0x1b8
github.com/go-delve/delve/service/dap.(*Session).halt(0xc00014e000)
	/Users/polina/delve/service/dap/server.go:1264 +0x13b
github.com/go-delve/delve/service/dap.(*Session).onPauseRequest(0xc00014e000, 0xc0001e79e0)
	/Users/polina/delve/service/dap/server.go:1919 +0xca
github.com/go-delve/delve/service/dap.(*Session).handleRequest(0xc00014e000, {0x471b920?, 0xc0001e79e0?})
	/Users/polina/delve/service/dap/server.go:602 +0x4c5
github.com/go-delve/delve/service/dap.(*Session).ServeDAPCodec(0xc00014e000)
	/Users/polina/delve/service/dap/server.go:545 +0x385
created by github.com/go-delve/delve/service/rpccommon.(*ServerImpl).serveConnectionDemux
	/Users/polina/delve/service/rpccommon/server.go:185 +0x34a

Looking at the code:

for i := 0; i < len(resp); i += 2 {
n, _ := strconv.ParseUint(string(resp[i:i+2]), 16, 8)
data[i/2] = uint8(n)
}

data must be of the wrong size. Also, i+2 could cause slice bounds error if len(resp) were odd.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions