lo_open returns with holding loop_index_mutex when
vx_check failed, resulting in a process lockup on
a loop device.
Signed-off-by: Ryota Ozaki <ozaki.ryota@gmail.com>
--- drivers/block/loop.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index b01b03c..c34ad3b 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1494,8 +1494,10 @@ static int lo_open(struct block_device *bdev, fmode_t mode) goto out; } - if (!vx_check(lo->lo_xid, VS_IDENT|VS_HOSTID|VS_ADMIN_P)) - return -EACCES; + if (!vx_check(lo->lo_xid, VS_IDENT|VS_HOSTID|VS_ADMIN_P)) { + err = -EACCES; + goto out; + } mutex_lock(&lo->lo_ctl_mutex); lo->lo_refcnt++; -- 1.7.5.4Received on Sat Dec 17 13:38:25 2011