diff --git a/ChangeLog b/ChangeLog index 568d19731e..c9d7c18fdc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-10-21 Dan Williams + + * src/NetworkManager.c + - (main): keep the DHCP manager around since it's a singleton; fixes + a use-after-free exposed by r4196 since the DHCP manager singleton + variable isn't cleared when the DHCP manager object is finalized + 2008-10-20 Dan Williams * libnm-util/nm-setting-wireless-security.c diff --git a/src/NetworkManager.c b/src/NetworkManager.c index 948fb664d3..2770fa40c4 100644 --- a/src/NetworkManager.c +++ b/src/NetworkManager.c @@ -47,6 +47,7 @@ #include "nm-named-manager.h" #include "nm-dbus-manager.h" #include "nm-supplicant-manager.h" +#include "nm-dhcp-manager.h" #include "nm-netlink-monitor.h" #include "nm-vpn-manager.h" #include "nm-logging.h" @@ -215,8 +216,9 @@ main (int argc, char *argv[]) NMPolicy *policy = NULL; NMVPNManager *vpn_manager = NULL; NMNamedManager *named_mgr = NULL; - NMDBusManager * dbus_mgr = NULL; - NMSupplicantManager * sup_mgr = NULL; + NMDBusManager *dbus_mgr = NULL; + NMSupplicantManager *sup_mgr = NULL; + NMDHCPManager *dhcp_mgr = NULL; GOptionEntry options[] = { {"no-daemon", 0, 0, G_OPTION_ARG_NONE, &become_daemon, "Don't become a daemon", NULL}, @@ -327,6 +329,12 @@ main (int argc, char *argv[]) goto done; } + dhcp_mgr = nm_dhcp_manager_get (); + if (!dhcp_mgr) { + nm_warning ("Failed to start the DHCP manager."); + goto done; + } + /* Start our DBus service */ if (!nm_dbus_manager_start_service (dbus_mgr)) { nm_warning ("Failed to start the dbus manager."); @@ -355,6 +363,9 @@ done: if (named_mgr) g_object_unref (named_mgr); + if (dhcp_mgr) + g_object_unref (dhcp_mgr); + if (sup_mgr) g_object_unref (sup_mgr);