diff mbox

[1/4] nfs: Fix leak of opts in nfs_file_open

Message ID 1409119356-22742-2-git-send-email-famz@redhat.com
State New
Headers show

Commit Message

Fam Zheng Aug. 27, 2014, 6:02 a.m. UTC
Signed-off-by: Fam Zheng <famz@redhat.com>
---
 block/nfs.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

Benoît Canet Aug. 27, 2014, 2:46 p.m. UTC | #1
The Wednesday 27 Aug 2014 à 14:02:33 (+0800), Fam Zheng wrote :
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  block/nfs.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/block/nfs.c b/block/nfs.c
> index 93d87f3..36e8057 100644
> --- a/block/nfs.c
> +++ b/block/nfs.c
> @@ -393,15 +393,18 @@ static int nfs_file_open(BlockDriverState *bs, QDict *options, int flags,
>      qemu_opts_absorb_qdict(opts, options, &local_err);
>      if (local_err) {
>          error_propagate(errp, local_err);
> -        return -EINVAL;
> +        ret = -EINVAL;

1)

Here you put the return code in ret and goto out.

> +        goto out;
>      }
>      ret = nfs_client_open(client, qemu_opt_get(opts, "filename"),
>                            (flags & BDRV_O_RDWR) ? O_RDWR : O_RDONLY,
>                            errp);
>      if (ret < 0) {
> -        return ret;
> +        goto out;

2) here you seem to want to do something later with the value of ret.

>      }
>      bs->total_sectors = ret;
> +out:
> +    qemu_opts_del(opts);

>      return 0;

Here the code simply return 0 discarding the return code you set in 1) and 2).

>  }
>  
> -- 
> 2.1.0
> 
>
Fam Zheng Aug. 28, 2014, 4:07 a.m. UTC | #2
On Wed, 08/27 16:46, Benoît Canet wrote:
> The Wednesday 27 Aug 2014 à 14:02:33 (+0800), Fam Zheng wrote :
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> >  block/nfs.c | 7 +++++--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> > 
> > diff --git a/block/nfs.c b/block/nfs.c
> > index 93d87f3..36e8057 100644
> > --- a/block/nfs.c
> > +++ b/block/nfs.c
> > @@ -393,15 +393,18 @@ static int nfs_file_open(BlockDriverState *bs, QDict *options, int flags,
> >      qemu_opts_absorb_qdict(opts, options, &local_err);
> >      if (local_err) {
> >          error_propagate(errp, local_err);
> > -        return -EINVAL;
> > +        ret = -EINVAL;
> 
> 1)
> 
> Here you put the return code in ret and goto out.
> 
> > +        goto out;
> >      }
> >      ret = nfs_client_open(client, qemu_opt_get(opts, "filename"),
> >                            (flags & BDRV_O_RDWR) ? O_RDWR : O_RDONLY,
> >                            errp);
> >      if (ret < 0) {
> > -        return ret;
> > +        goto out;
> 
> 2) here you seem to want to do something later with the value of ret.
> 
> >      }
> >      bs->total_sectors = ret;
> > +out:
> > +    qemu_opts_del(opts);
> 
> >      return 0;
> 
> Here the code simply return 0 discarding the return code you set in 1) and 2).

Good catch. Will fix.

Fam

> 
> >  }
> >  
> > -- 
> > 2.1.0
> > 
> >
diff mbox

Patch

diff --git a/block/nfs.c b/block/nfs.c
index 93d87f3..36e8057 100644
--- a/block/nfs.c
+++ b/block/nfs.c
@@ -393,15 +393,18 @@  static int nfs_file_open(BlockDriverState *bs, QDict *options, int flags,
     qemu_opts_absorb_qdict(opts, options, &local_err);
     if (local_err) {
         error_propagate(errp, local_err);
-        return -EINVAL;
+        ret = -EINVAL;
+        goto out;
     }
     ret = nfs_client_open(client, qemu_opt_get(opts, "filename"),
                           (flags & BDRV_O_RDWR) ? O_RDWR : O_RDONLY,
                           errp);
     if (ret < 0) {
-        return ret;
+        goto out;
     }
     bs->total_sectors = ret;
+out:
+    qemu_opts_del(opts);
     return 0;
 }