From: Mike Snitzer NBD does not protect the nbd_device's socket from becoming NULL during receives. This closes a race with the NBD_CLEAR_SOCK ioctl (nbd-client -d) setting the nbd_device's socket to NULL right before NBD calls sock_xmit. Signed-off-by: Mike Snitzer Cc: Paul Clements Signed-off-by: Andrew Morton --- drivers/block/nbd.c | 6 ++++++ 1 file changed, 6 insertions(+) diff -puN drivers/block/nbd.c~nbd-prevent-sock_xmit-from-attempting-to-use-a-null-socket drivers/block/nbd.c --- a/drivers/block/nbd.c~nbd-prevent-sock_xmit-from-attempting-to-use-a-null-socket +++ a/drivers/block/nbd.c @@ -153,6 +153,12 @@ static int sock_xmit(struct nbd_device * struct kvec iov; sigset_t blocked, oldset; + if (unlikely(!sock)) { + printk(KERN_ERR "%s: Attempted %s on closed socket in sock_xmit\n", + lo->disk->disk_name, (send ? "send" : "recv")); + return -EINVAL; + } + /* Allow interception of SIGKILL only * Don't allow other signals to interrupt the transmission */ siginitsetinv(&blocked, sigmask(SIGKILL)); _