summaryrefslogtreecommitdiff
path: root/src/network
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-01-16 22:07:06 +0900
committerLuca Boccassi <luca.boccassi@gmail.com>2023-01-16 19:42:59 +0000
commit303dfa73b389e8f6dc58954e867c21724c1446f7 (patch)
tree7c9ead5ad2bf3e9ec0593185e7799b0d317e08ea /src/network
parent37df1221d5efb9c8c07d3de2c2033826bf64d9d6 (diff)
downloadsystemd-303dfa73b389e8f6dc58954e867c21724c1446f7.tar.gz
network: fix memleak
Fixes a bug introduced by af2aea8bb64b0dc42ecbe5549216eb567681a803. Fixes #25883 and #25891.
Diffstat (limited to 'src/network')
-rw-r--r--src/network/networkd-address.c6
-rw-r--r--src/network/networkd-route.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
index 5b3b7d128a..c691a5e057 100644
--- a/src/network/networkd-address.c
+++ b/src/network/networkd-address.c
@@ -1216,9 +1216,13 @@ int link_request_address(
(void) address_get(link, address, &existing);
- if (address->lifetime_valid_usec == 0)
+ if (address->lifetime_valid_usec == 0) {
+ if (consume_object)
+ address_free(address);
+
/* The requested address is outdated. Let's remove it. */
return address_remove_and_drop(existing);
+ }
if (!existing) {
_cleanup_(address_freep) Address *tmp = NULL;
diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c
index d1f3bab092..5214a8ad2c 100644
--- a/src/network/networkd-route.c
+++ b/src/network/networkd-route.c
@@ -1437,9 +1437,13 @@ int link_request_route(
(void) route_get(link->manager, link, route, &existing);
- if (route->lifetime_usec == 0)
+ if (route->lifetime_usec == 0) {
+ if (consume_object)
+ route_free(route);
+
/* The requested route is outdated. Let's remove it. */
return route_remove_and_drop(existing);
+ }
if (!existing) {
_cleanup_(route_freep) Route *tmp = NULL;