On Sat, Dec 17, 2011 at 10:30:58PM +0900, Ryota Ozaki wrote:
> lo_open returns with holding loop_index_mutex when
> vx_check failed, resulting in a process lockup on
> a loop device.
thanks a bunch!
best,
Herbert
> 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.4
Received on Sat Dec 17 18:59:11 2011