]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/sysctl-monitor: fix use-after-free
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Sep 2024 06:08:36 +0000 (15:08 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Sep 2024 06:12:47 +0000 (15:12 +0900)
Previously, manager_free() did not assign NULL to Manager.sysctl_shadow,
hence sysctl_clear_link_shadows() called by link_free() will causes
use-after-free. To fix the issue, this makes Manager.sysctl_shadow will be
set to NULL after it is freed,

Fixes a bug introduced by 6d9ef22acdeac4b429efb75164341233955484af.

src/network/networkd-manager.c

index 9925f3c25ae0ea8a9ba6a83c18c5ae956b222e01..631ab8556264351a3e98dd47dbd052ff6b4eb078 100644 (file)
@@ -624,7 +624,7 @@ Manager* manager_free(Manager *m) {
         HASHMAP_FOREACH(link, m->links_by_index)
                 (void) link_stop_engines(link, true);
 
-        hashmap_free(m->sysctl_shadow);
+        m->sysctl_shadow = hashmap_free(m->sysctl_shadow);
 
         m->request_queue = ordered_set_free(m->request_queue);
         m->remove_request_queue = ordered_set_free(m->remove_request_queue);