[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH 5/6] util: Plug memory leak on virNetDevBridgeGet() sucessful path



On 11/29/2011 10:57 PM, ajia redhat com wrote:
> From: Alex Jia <ajia redhat com>
> 
> Detected by Coverity. Leak introduced in commit c1df2c1.
> 
> Signed-off-by: Alex Jia <ajia redhat com>
> ---
>  src/util/virnetdevbridge.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/src/util/virnetdevbridge.c b/src/util/virnetdevbridge.c
> index 060445d..d9708fa 100644
> --- a/src/util/virnetdevbridge.c
> +++ b/src/util/virnetdevbridge.c
> @@ -168,6 +168,7 @@ static int virNetDevBridgeGet(const char *brname,
>              virReportSystemError(EINVAL,
>                                   _("Unable to get bridge %s %s"), brname, paramname);
>          }
> +        VIR_FREE(valuestr);

An improvement, but still not quite right.  If we reported EINVAL, we
lacked the goto cleanup that let this function return -1.

Pushing with this squashed in:

diff --git i/src/util/virnetdevbridge.c w/src/util/virnetdevbridge.c
index d9708fa..0440a73 100644
--- i/src/util/virnetdevbridge.c
+++ w/src/util/virnetdevbridge.c
@@ -161,12 +161,16 @@ static int virNetDevBridgeGet(const char *brname,

     if (virFileExists(path)) {
         char *valuestr;
-        if (virFileReadAll(path, INT_BUFSIZE_BOUND(unsigned long),
&valuestr) < 0)
+        if (virFileReadAll(path, INT_BUFSIZE_BOUND(unsigned long),
+                           &valuestr) < 0)
             goto cleanup;

         if (virStrToLong_ul(valuestr, NULL, 10, value) < 0) {
             virReportSystemError(EINVAL,
-                                 _("Unable to get bridge %s %s"),
brname, paramname);
+                                 _("Unable to get bridge %s %s"),
+                                 brname, paramname);
+            VIR_FREE(valuestr);
+            goto cleanup;
         }
         VIR_FREE(valuestr);
     } else {


-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]