From: Mike Snitzer Date: Wed, 2 Apr 2008 20:04:47 +0000 (-0700) Subject: nbd: prevent sock_xmit from attempting to use a NULL socket X-Git-Tag: v2.6.25-rc9~87 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=ffc41cf8dbb1b895a87daf47d0e5bf6dfbfcab4c;p=linux-2.6-omap-h63xx.git nbd: prevent sock_xmit from attempting to use a NULL socket 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 Signed-off-by: Linus Torvalds --- diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index b53fdb0a282..60cc54368b6 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -153,6 +153,12 @@ static int sock_xmit(struct nbd_device *lo, int send, void *buf, int size, 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));