]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: netdev: increment reference counter on request
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Feb 2022 18:26:16 +0000 (03:26 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 15 Feb 2022 06:54:02 +0000 (15:54 +0900)
Otherwise, it may be freed on reload.

src/network/netdev/netdev.c
src/network/networkd-queue.c

index fb16c255a619ae33cd0c25838aa334b1f3687a10..151a94f928e4bd288d1bc8625e161b9e590f35c8 100644 (file)
@@ -732,13 +732,13 @@ int link_request_stacked_netdev(Link *link, NetDev *netdev) {
 
         if (netdev_get_create_type(netdev) == NETDEV_CREATE_STACKED) {
                 link->stacked_netdevs_created = false;
-                r = link_queue_request(link, REQUEST_TYPE_NETDEV_STACKED, netdev, false,
+                r = link_queue_request(link, REQUEST_TYPE_NETDEV_STACKED, netdev_ref(netdev), true,
                                        &link->create_stacked_netdev_messages,
                                        link_create_stacked_netdev_handler,
                                        NULL);
         } else {
                 link->stacked_netdevs_after_configured_created = false;
-                r = link_queue_request(link, REQUEST_TYPE_NETDEV_STACKED, netdev, false,
+                r = link_queue_request(link, REQUEST_TYPE_NETDEV_STACKED, netdev_ref(netdev), true,
                                        &link->create_stacked_netdev_after_configured_messages,
                                        link_create_stacked_netdev_after_configured_handler,
                                        NULL);
index eaaaf7d7e6d04aefee2684c41628604ebe8ef5a3..f1760a29e09d35ff37162aa5193ee38f1759d4a5 100644 (file)
@@ -47,6 +47,7 @@ static void request_free_object(RequestType type, void *object) {
                 neighbor_free(object);
                 break;
         case REQUEST_TYPE_NETDEV_STACKED:
+                netdev_unref(object);
                 break;
         case REQUEST_TYPE_NEXTHOP:
                 nexthop_free(object);