From 12fd655de4cf12787fd574ff67da3a04f25fb52d Mon Sep 17 00:00:00 2001 From: Qiang Huang Date: Fri, 15 May 2015 13:09:46 +0800 Subject: [PATCH] Fix stacktrace panic According to https://golang.org/src/runtime/symtab.go?s=3423:3455#L94 It is possibile that runtime.FuncForPC() returns nil, don't know how but I do met this problem when some kernel config problems cause `p.createNetworkInterfaces` return error. panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0] goroutine 74 [running]: github_com_docker_libcontainer_stacktrace.NewFrame /go/src/github.com/docker/docker/vendor/src/github.com/docker/libcontainer/stacktrace/frame.go:12 github_com_docker_libcontainer_stacktrace.Capture /go/src/github.com/docker/docker/vendor/src/github.com/docker/libcontainer/stacktrace/capture.go:18 libcontainer.newSystemError /go/src/github.com/docker/docker/vendor/src/github.com/docker/libcontainer/generic_error.go:48 github_com_docker_libcontainer.start.pN42_github_com_docker_libcontainer.initProcess /go/src/github.com/docker/docker/vendor/src/github.com/docker/libcontainer/process_linux.go:177 github_com_docker_libcontainer.Start.pN45_github_com_docker_libcontainer.linuxContainer /go/src/github.com/docker/docker/vendor/src/github.com/docker/libcontainer/container_linux.go:102 github_com_docker_docker_daemon_execdriver_native.Run.pN56_github_com_docker_docker_daemon_execdriver_native.driver /go/src/github.com/docker/docker/.gopath/src/github.com/docker/docker/daemon/execdriver/native/driver.go:149 github_com_docker_docker_daemon.Run.pN38_github_com_docker_docker_daemon.Daemon /go/src/github.com/docker/docker/.gopath/src/github.com/docker/docker/daemon/daemon.go:1007 github_com_docker_docker_daemon.Start.pN48_github_com_docker_docker_daemon.containerMonitor /go/src/github.com/docker/docker/.gopath/src/github.com/docker/docker/daemon/monitor.go:138 promise.$nested0 /go/src/github.com/docker/docker/.gopath/src/github.com/docker/docker/pkg/promise/promise.go:8 created by github_com_docker_docker_pkg_promise.Go /go/src/github.com/docker/docker/.gopath/src/github.com/docker/docker/pkg/promise/promise.go:7 Signed-off-by: Qiang Huang --- stacktrace/frame.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/stacktrace/frame.go b/stacktrace/frame.go index 5edea1b7..0d590d9a 100644 --- a/stacktrace/frame.go +++ b/stacktrace/frame.go @@ -9,6 +9,9 @@ import ( // NewFrame returns a new stack frame for the provided information func NewFrame(pc uintptr, file string, line int) Frame { fn := runtime.FuncForPC(pc) + if fn == nil { + return Frame{} + } pack, name := parseFunctionName(fn.Name()) return Frame{ Line: line,