hyperhq / runv

Hypervisor-based Runtime for OCI
Apache License 2.0
828 stars 129 forks source link

VmContext.loop: Hold ctx.lock when access ctx.handler to fix crash #681

Closed teawater closed 6 years ago

teawater commented 6 years ago

Got following crash in hyperd: E0409 03:06:59.520358 30295 json.go:458] SB[vm-QctatzSfUb] tty socket closed, quit the the reading goroutine: read unix @->/var/run/hyper/vm-QctatzSfUb/tty.sock: use of closed panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x93c26a] goroutine 33274 [running]: github.com/hyperhq/hyperd/vendor/github.com/hyperhq/runv/hypervisor.(VmContext).loop(0xc42171eb00) /root/gopath/src/github.com/hyperhq/hyperd/vendor/github.com/hyperhq/runv/hypervisor/hypervisor.go:24 +0x20a created by github.com/hyperhq/hyperd/vendor/github.com/hyperhq/runv/hypervisor.(VmContext).Launch /root/gopath/src/github.com/hyperhq/hyperd/vendor/github.com/hyperhq/runv/hypervisor/hypervisor.go:92

The root cause is VmContext.loop access ctx.handler without lock. Add code hold ctx.lock to handle the issue.

Signed-off-by: Hui Zhu teawater@hyper.sh