sd-dhcp: don't randomly ref objects
In our API design, getter-functions don't ref objects. Calls like foo_get_bar() will not ref 'bar'. We never do that and there is no real reason to do it in single threaded APIs. If you need a ref-count, you better take it yourself *BEFORE* doing anything else on the parent object (as this might invalidate your pointer). Right now, sd_dhcp?_get_lease() refs the lease it returns. A lot of code-paths in systemd do not expect this and thus leak the lease reference. Fix this by changing the API to not ref returned objects.
This commit is contained in:
@@ -348,7 +348,7 @@ int sd_dhcp_client_get_lease(sd_dhcp_client *client, sd_dhcp_lease **ret) {
|
||||
client->state != DHCP_STATE_REBINDING)
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
*ret = sd_dhcp_lease_ref(client->lease);
|
||||
*ret = client->lease;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ int sd_dhcp6_client_get_lease(sd_dhcp6_client *client, sd_dhcp6_lease **ret) {
|
||||
if (!client->lease)
|
||||
return -ENOMSG;
|
||||
|
||||
*ret = sd_dhcp6_lease_ref(client->lease);
|
||||
*ret = client->lease;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -393,7 +393,6 @@ static void test_addr_acq_acquired(sd_dhcp_client *client, int event,
|
||||
if (verbose)
|
||||
printf(" DHCP address acquired\n");
|
||||
|
||||
sd_dhcp_lease_unref(lease);
|
||||
sd_event_exit(e, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -365,7 +365,7 @@ static int dhcp_lease_renew(sd_dhcp_client *client, Link *link) {
|
||||
|
||||
sd_dhcp_lease_unref(link->dhcp_lease);
|
||||
link->dhcp4_configured = false;
|
||||
link->dhcp_lease = lease;
|
||||
link->dhcp_lease = sd_dhcp_lease_ref(lease);
|
||||
|
||||
r = sd_dhcp_lease_get_address(lease, &address);
|
||||
if (r < 0) {
|
||||
@@ -454,7 +454,7 @@ static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) {
|
||||
"PREFIXLEN=%u", prefixlen,
|
||||
NULL);
|
||||
|
||||
link->dhcp_lease = lease;
|
||||
link->dhcp_lease = sd_dhcp_lease_ref(lease);
|
||||
|
||||
if (link->network->dhcp_mtu) {
|
||||
uint16_t mtu;
|
||||
|
||||
Reference in New Issue
Block a user