sysroot: Fix leak/double free of keyfile origin
authorColin Walters <walters@verbum.org>
Tue, 29 Nov 2016 03:00:01 +0000 (22:00 -0500)
committerSimon McVittie <smcv@debian.org>
Thu, 1 Dec 2016 12:38:54 +0000 (12:38 +0000)
Use autoptr rather than manual cleanup.  The double free isn't a
security problem, since we trust origin files.

Closes: #598
Approved by: jlebon

Gbp-Pq: Name ASAN-sysroot-Fix-leak-double-free-of-keyfile-origin.patch

src/libostree/ostree-deployment.c
src/libostree/ostree-sysroot.c

index 7b93e6cc886d5d25f1375e6d426de31ac7ba27b4..67e896bfd66edb8baaeab457c94bc377253c7626 100644 (file)
@@ -133,7 +133,6 @@ OstreeDeployment *
 ostree_deployment_clone (OstreeDeployment *self)
 {
   glnx_unref_object OstreeBootconfigParser *new_bootconfig = NULL;
-  GKeyFile *new_origin = NULL;
   OstreeDeployment *ret = ostree_deployment_new (self->index, self->osname, self->csum,
                                                  self->deployserial,
                                                  self->bootcsum, self->bootserial);
@@ -143,6 +142,7 @@ ostree_deployment_clone (OstreeDeployment *self)
 
   if (self->origin)
     {
+      g_autoptr(GKeyFile) new_origin = NULL;
       g_autofree char *data = NULL;
       gsize len;
       gboolean success;
index 608d4cff18b78e4896f9d359e38626c47babeb2d..70ce15670f9918b775595320b740ffa8cc002420 100644 (file)
@@ -613,8 +613,6 @@ parse_origin (OstreeSysroot   *self,
  out:
   if (error)
     g_prefix_error (error, "Parsing %s: ", origin_path);
-  if (ret_origin)
-    g_key_file_unref (ret_origin);
   return ret;
 }
 
@@ -689,7 +687,7 @@ parse_deployment (OstreeSysroot       *self,
   glnx_fd_close int deployment_dfd = -1;
   const char *deploy_basename;
   g_autofree char *treebootserial_target = NULL;
-  GKeyFile *origin = NULL;
+  g_autoptr(GKeyFile) origin = NULL;
   g_autofree char *unlocked_development_path = NULL;
   struct stat stbuf;
 
@@ -751,8 +749,6 @@ parse_deployment (OstreeSysroot       *self,
   if (out_deployment)
     *out_deployment = g_steal_pointer (&ret_deployment);
  out:
-  if (origin)
-    g_key_file_unref (origin);
   return ret;
 }