containers / docker-lvm-plugin

Docker volume plugin for LVM volumes
GNU Lesser General Public License v3.0
155 stars 64 forks source link

Fix nil pointer dereference issue in Capabilities path. #51

Closed shishir-a412ed closed 6 years ago

shishir-a412ed commented 6 years ago

Signed-off-by: Shishir Mahajan shishirm@nvidia.com

shishir-a412ed commented 6 years ago

There is a nil (NULL) pointer dereference issue in plugin Capabilities path. When you have running containers with docker-lvm-plugin volumes mounted in it, and docker daemon restarts, you see following in the logs:

docker-lvm-plugin logs:

May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: 2018/05/01 21:51:50 Entering go-plugins-helpers capabilitiesPath
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: 2018/05/01 21:51:50 http: panic serving @: runtime error: invalid memory address or nil pointer dereference
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: goroutine 7 [running]:
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: net/http.(*conn).serve.func1(0xc420102980)
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /usr/lib/golang/src/net/http/server.go:1491 +0x12a
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: panic(0x680940, 0xc42000c060)
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /usr/lib/golang/src/runtime/panic.go:458 +0x243
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: main.(*lvmDriver).Capabilities(0xc420064960, 0x1)
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /home/smahajan/go/src/github.com/docker-lvm-plugin/driver.go:355 +0x10
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: github.com/docker/go-plugins-helpers/volume.(*Handler).initMux.func8(0x7f6d80, 0xc4201004e0, 0xc4200cc690)
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /home/smahajan/go/src/github.com/docker/go-plugins-helpers/volume/api.go:227 +0xbe
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: net/http.HandlerFunc.ServeHTTP(0xc4200ec7f0, 0x7f6d80, 0xc4201004e0, 0xc4200cc690)
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /usr/lib/golang/src/net/http/server.go:1726 +0x44
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: net/http.(*ServeMux).ServeHTTP(0xc42005b5f0, 0x7f6d80, 0xc4201004e0, 0xc4200cc690)
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /usr/lib/golang/src/net/http/server.go:2022 +0x7f
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: net/http.serverHandler.ServeHTTP(0xc420086d80, 0x7f6d80, 0xc4201004e0, 0xc4200cc690)
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /usr/lib/golang/src/net/http/server.go:2202 +0x7d
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: net/http.(*conn).serve(0xc420102980, 0x7f7300, 0xc42000e840)
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /usr/lib/golang/src/net/http/server.go:1579 +0x4b7
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]: created by net/http.(*Server).Serve
May 01 21:51:50 localhost.localdomain docker-lvm-plugin[15272]:         /usr/lib/
golang/src/net/http/server.go:2293 +0x44d

docker daemon logs:

May 01 21:51:23 localhost.localdomain dockerd-current[15336]: time="2018-05-01T21:51:23.604537892-04:00" level=warning msg="Unable to connect to plugin: /run/docker/plugins/lvm.sock/VolumeDriver.Capabilities: Post http://%2Frun%2Fdocker%2Fplugins%2Flvm.sock/VolumeDriver.Capabilities: EOF, retrying in 1s"
May 01 21:51:24 localhost.localdomain dockerd-current[15336]: time="2018-05-01T21:51:24.605772858-04:00" level=warning msg="Unable to connect to plugin: /run/docker/plugins/lvm.sock/VolumeDriver.Capabilities: Post http://%2Frun%2Fdocker%2Fplugins%2Flvm.sock/VolumeDriver.Capabilities: http: ContentLength=3 with Body length 0, retrying in 2s"
May 01 21:51:26 localhost.localdomain dockerd-current[15336]: time="2018-05-01T21:51:26.606521683-04:00" level=warning msg="Unable to connect to plugin: /run/docker/plugins/lvm.sock/VolumeDriver.Capabilities: Post http://%2Frun%2Fdocker%2Fplugins%2Flvm.sock/VolumeDriver.Capabilities: http: ContentLength=3 with Body length 0, retrying in 4s"

This PR fixes that. ping @rhatdan

rhatdan commented 6 years ago

LGTM