net: do not use atexit for cleanup
authorPaolo Bonzini <pbonzini@redhat.com>
Fri, 8 Jul 2016 15:28:34 +0000 (17:28 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 13 Jul 2016 11:30:00 +0000 (13:30 +0200)
This will be necessary in the next patch, which stops using atexit for
character devices; without it, vhost-user and the redirector filter
will cause a use-after-free.  Relying on the ordering of atexit calls
is also brittle, even now that both the network and chardev
subsystems are using atexit.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
vl.c

diff --git a/vl.c b/vl.c
index 356713e..cad4da2 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -4345,9 +4345,6 @@ int main(int argc, char **argv, char **envp)
         qemu_opts_del(icount_opts);
     }
 
-    /* clean up network at qemu process termination */
-    atexit(&net_cleanup);
-
     if (default_net) {
         QemuOptsList *net = qemu_find_opts("net");
         qemu_opts_set(net, NULL, "type", "nic", &error_abort);
@@ -4611,5 +4608,7 @@ int main(int argc, char **argv, char **envp)
     tpm_cleanup();
 #endif
 
+    net_cleanup();
+
     return 0;
 }