fetcher/curl: Fix invalid memory access in finalize()
authorKalev Lember <klember@redhat.com>
Tue, 7 Nov 2017 15:10:45 +0000 (16:10 +0100)
committerAtomic Bot <atomic-devel@projectatomic.io>
Tue, 7 Nov 2017 15:37:20 +0000 (15:37 +0000)
Reorder cleanup functions so that curl_multi_cleanup() runs before
self->sockets is destroyed. This avoids an assert and invalid memory
access in sock_cb where self->sockets is dereferenced during
curl_multi_cleanup().

Closes: https://github.com/ostreedev/ostree/issues/1331
Closes: #1332
Approved by: cgwalters

src/libostree/ostree-fetcher-curl.c

index 1f64188258ed2d7ded5908e03f2854fbe4d666d2..8a23b16361efbd11291e2acee2d2508eb67608ba 100644 (file)
@@ -167,6 +167,7 @@ _ostree_fetcher_finalize (GObject *object)
 {
   OstreeFetcher *self = OSTREE_FETCHER (object);
 
+  curl_multi_cleanup (self->multi);
   g_free (self->remote_name);
   g_free (self->cookie_jar_path);
   g_free (self->proxy);
@@ -177,7 +178,6 @@ _ostree_fetcher_finalize (GObject *object)
   g_clear_pointer (&self->timer_event, (GDestroyNotify)destroy_and_unref_source);
   if (self->mainctx)
     g_main_context_unref (self->mainctx);
-  curl_multi_cleanup (self->multi);
 
   G_OBJECT_CLASS (_ostree_fetcher_parent_class)->finalize (object);
 }