From: Yu Watanabe Date: Sat, 8 Jul 2023 22:15:21 +0000 (+0900) Subject: network/address: free Address object by caller that passed to link_request_address() X-Git-Tag: v255-rc1~890^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f60e65583e2d5b34a97ce1bfa40b6af3bcc24f24;p=thirdparty%2Fsystemd.git network/address: free Address object by caller that passed to link_request_address() Follow-up for 9684a8ded083dd427f843b0c40aa0292e6c7ae06. Now, the input Address object is always copied, hence it is not necessary to free it in link_request_address(). --- diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index c33ffa95766..276aad0989b 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -1246,13 +1246,11 @@ static int address_process_request(Request *req, Link *link, Address *address) { int link_request_address( Link *link, - Address *address, - bool consume_object, + const Address *address, unsigned *message_counter, address_netlink_handler_t netlink_handler, Request **ret) { - _unused_ _cleanup_(address_freep) Address *address_will_be_freed = NULL; Address *existing; int r; @@ -1260,9 +1258,6 @@ int link_request_address( assert(address); assert(address->source != NETWORK_CONFIG_SOURCE_FOREIGN); - if (consume_object) - address_will_be_freed = address; - if (address_get(link, address, &existing) < 0) { _cleanup_(address_freep) Address *tmp = NULL; @@ -1341,12 +1336,12 @@ static int static_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reque return 1; } -int link_request_static_address(Link *link, Address *address, bool consume) { +int link_request_static_address(Link *link, const Address *address) { assert(link); assert(address); assert(address->source == NETWORK_CONFIG_SOURCE_STATIC); - return link_request_address(link, address, consume, &link->static_address_messages, + return link_request_address(link, address, &link->static_address_messages, static_address_handler, NULL); } @@ -1360,7 +1355,7 @@ int link_request_static_addresses(Link *link) { link->static_addresses_configured = false; ORDERED_HASHMAP_FOREACH(a, link->network->addresses_by_section) { - r = link_request_static_address(link, a, false); + r = link_request_static_address(link, a); if (r < 0) return r; } diff --git a/src/network/networkd-address.h b/src/network/networkd-address.h index 766da8ee754..5cb1cc388e7 100644 --- a/src/network/networkd-address.h +++ b/src/network/networkd-address.h @@ -107,12 +107,11 @@ bool manager_has_address(Manager *manager, int family, const union in_addr_union void address_cancel_request(Address *address); int link_request_address( Link *link, - Address *address, - bool consume_object, + const Address *address, unsigned *message_counter, address_netlink_handler_t netlink_handler, Request **ret); -int link_request_static_address(Link *link, Address *address, bool consume); +int link_request_static_address(Link *link, const Address *address); int link_request_static_addresses(Link *link); int manager_rtnl_process_address(sd_netlink *nl, sd_netlink_message *message, Manager *m); diff --git a/src/network/networkd-dhcp-prefix-delegation.c b/src/network/networkd-dhcp-prefix-delegation.c index 66c5e979d9f..9e39fa649ec 100644 --- a/src/network/networkd-dhcp-prefix-delegation.c +++ b/src/network/networkd-dhcp-prefix-delegation.c @@ -421,7 +421,7 @@ static int dhcp_pd_request_address( else address_unmark(existing); - r = link_request_address(link, TAKE_PTR(address), true, &link->dhcp_pd_messages, + r = link_request_address(link, address, &link->dhcp_pd_messages, dhcp_pd_address_handler, NULL); if (r < 0) return log_link_error_errno(link, r, "Failed to request DHCP delegated prefix address: %m"); diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c index 620fbbddc72..50d84893c63 100644 --- a/src/network/networkd-dhcp-server.c +++ b/src/network/networkd-dhcp-server.c @@ -115,7 +115,7 @@ int link_request_dhcp_server_address(Link *link) { * Configure the DHCP server address only when it is not. */ return 0; - return link_request_static_address(link, TAKE_PTR(address), true); + return link_request_static_address(link, address); } static int link_find_dhcp_server_address(Link *link, Address **ret) { diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index fd8ef402bdf..fd72f734139 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -984,7 +984,7 @@ static int dhcp4_request_address(Link *link, bool announce) { else address_unmark(existing); - r = link_request_address(link, TAKE_PTR(addr), true, &link->dhcp4_messages, + r = link_request_address(link, addr, &link->dhcp4_messages, dhcp4_address_handler, NULL); if (r < 0) return log_link_error_errno(link, r, "Failed to request DHCPv4 address: %m"); diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 57272e7bf60..44c9a95f8d1 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -232,7 +232,7 @@ static int dhcp6_request_address( else address_unmark(existing); - r = link_request_address(link, TAKE_PTR(addr), true, &link->dhcp6_messages, + r = link_request_address(link, addr, &link->dhcp6_messages, dhcp6_address_handler, NULL); if (r < 0) return log_link_error_errno(link, r, "Failed to request DHCPv6 address %s/128: %m", diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index 8450b346b19..ee78fffdfb3 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -120,7 +120,7 @@ static int ipv4ll_address_claimed(sd_ipv4ll *ll, Link *link) { log_link_debug(link, "IPv4 link-local claim "IPV4_ADDRESS_FMT_STR, IPV4_ADDRESS_FMT_VAL(address->in_addr.in)); - return link_request_address(link, TAKE_PTR(address), true, NULL, ipv4ll_address_handler, NULL); + return link_request_address(link, address, NULL, ipv4ll_address_handler, NULL); } static void ipv4ll_handler(sd_ipv4ll *ll, int event, void *userdata) { diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 8e6389d2026..972ba52b9ea 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -250,7 +250,7 @@ static int ndisc_request_address(Address *in, Link *link, sd_ndisc_router *rt) { is_new = address_get(link, address, NULL) < 0; - r = link_request_address(link, TAKE_PTR(address), true, &link->ndisc_messages, + r = link_request_address(link, address, &link->ndisc_messages, ndisc_address_handler, NULL); if (r < 0) return r; diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index db1ecb4c97a..0f67ff09732 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -214,7 +214,7 @@ int link_request_radv_addresses(Link *link) { address->prefixlen = p->prefixlen; address->route_metric = p->route_metric; - r = link_request_static_address(link, TAKE_PTR(address), true); + r = link_request_static_address(link, address); if (r < 0) return r; }