[lxc-devel] [PATCH] fix memory leaks reported by cppcheck in src/lxc/conf.c, this also fixes possible crashes due to passing NULL to strlen

Serge Hallyn serge.hallyn at ubuntu.com
Mon Nov 18 18:34:54 UTC 2013


Quoting S.Çağlar Onur (caglar at 10ur.org):
> Hi Serge,
> 
> On Mon, Nov 18, 2013 at 10:52 AM, Serge Hallyn <serge.hallyn at ubuntu.com> wrote:
> > Quoting S.Çağlar Onur (caglar at 10ur.org):
> >> Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
> >
> > Hi,
> >
> > please try to keep a single, one-line description as the
> > subject, with the longer patch description in the body.  It
> > will keep git history much neater.
> 
> Sure, will do!
> 
> > One question below,
> >
> >> ---
> >>  src/lxc/conf.c | 28 +++++++++++++++++++---------
> >>  1 file changed, 19 insertions(+), 9 deletions(-)
> >>
> >> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> >> index dec1c05..1af50e2 100644
> >> --- a/src/lxc/conf.c
> >> +++ b/src/lxc/conf.c
> >> @@ -2425,23 +2425,26 @@ static int instanciate_veth(struct lxc_handler *handler, struct lxc_netdev *netd
> >>                       return -1;
> >>               }
> >>               veth1 = mkifname(veth1buf);
> >> +             if (!veth1) {
> >> +                     ERROR("failed to allocate a temporary name");
> >> +                     return -1;
> >> +             }
> >>               /* store away for deconf */
> >>               memcpy(netdev->priv.veth_attr.veth1, veth1, IFNAMSIZ);
> >>       }
> >>
> >>       snprintf(veth2buf, sizeof(veth2buf), "vethXXXXXX");
> >>       veth2 = mkifname(veth2buf);
> >> -
> >> -     if (!strlen(veth1) || !strlen(veth2)) {
> >> +     if (!veth2) {
> >>               ERROR("failed to allocate a temporary name");
> >> -             return -1;
> >> +             goto out_delete;
> >>       }
> >>
> >>       err = lxc_veth_create(veth1, veth2);
> >>       if (err) {
> >>               ERROR("failed to create %s-%s : %s", veth1, veth2,
> >>                     strerror(-err));
> >> -             return -1;
> >> +             goto out_delete;
> >>       }
> >>
> >>       /* changing the high byte of the mac address to 0xfe, the bridge interface
> >> @@ -2500,6 +2503,10 @@ static int instanciate_veth(struct lxc_handler *handler, struct lxc_netdev *netd
> >>
> >>  out_delete:
> >>       lxc_netdev_delete_by_name(veth1);
> >> +     if (!netdev->priv.veth_attr.pair && veth2)
> >
> > Did you mean to check for veth1 here?
> 
> Ah yes it suppose to be veth1, do you want me to send a new version?

Sure, that'll be easiest (for me :).

thanks,
-serge

> >> +             free(veth1);
> >> +     if(veth2)
> >> +             free(veth2);
> >>       return -1;
> >>  }
> >>
> >> @@ -2537,7 +2544,7 @@ static int instanciate_macvlan(struct lxc_handler *handler, struct lxc_netdev *n
> >>               return -1;
> >>
> >>       peer = mkifname(peerbuf);
> >> -     if (!strlen(peer)) {
> >> +     if (!peer) {
> >>               ERROR("failed to make a temporary name");
> >>               return -1;
> >>       }
> >> @@ -2547,27 +2554,30 @@ static int instanciate_macvlan(struct lxc_handler *handler, struct lxc_netdev *n
> >>       if (err) {
> >>               ERROR("failed to create macvlan interface '%s' on '%s' : %s",
> >>                     peer, netdev->link, strerror(-err));
> >> -             return -1;
> >> +             goto out;
> >>       }
> >>
> >>       netdev->ifindex = if_nametoindex(peer);
> >>       if (!netdev->ifindex) {
> >>               ERROR("failed to retrieve the index for %s", peer);
> >> -             lxc_netdev_delete_by_name(peer);
> >> -             return -1;
> >> +             goto out;
> >>       }
> >>
> >>       if (netdev->upscript) {
> >>               err = run_script(handler->name, "net", netdev->upscript, "up",
> >>                                "macvlan", netdev->link, (char*) NULL);
> >>               if (err)
> >> -                     return -1;
> >> +                     goto out;
> >>       }
> >>
> >>       DEBUG("instanciated macvlan '%s', index is '%d' and mode '%d'",
> >>             peer, netdev->ifindex, netdev->priv.macvlan_attr.mode);
> >>
> >>       return 0;
> >> +out:
> >> +    lxc_netdev_delete_by_name(peer);
> >> +    free(peer);
> >> +     return -1;
> >>  }
> >>
> >>  static int shutdown_macvlan(struct lxc_handler *handler, struct lxc_netdev *netdev)
> >> --
> >> 1.8.3.2
> >>
> >>
> >> ------------------------------------------------------------------------------
> >> DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps
> >> OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access
> >> Free app hosting. Or install the open source package on any LAMP server.
> >> Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native!
> >> http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk
> >> _______________________________________________
> >> Lxc-devel mailing list
> >> Lxc-devel at lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/lxc-devel
> 
> 
> 
> -- 
> S.Çağlar Onur <caglar at 10ur.org>




More information about the lxc-devel mailing list