From: Daniel Wang Date: Wed, 24 May 2017 12:05:49 +0000 (-0700) Subject: DHCP: Fail link_dhcp_set_routes promotely if no address is assigned from lease (... X-Git-Tag: v234~168 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b23aec0d6b98bc99998786506a8769e1a1ea1841;p=platform%2Fupstream%2Fsystemd.git DHCP: Fail link_dhcp_set_routes promotely if no address is assigned from lease (#6009) Currently the local variable `address` is unintialized if the DHCP lease doesn't provide a router address (when r == -ENODATA). Thus the subsequent call to route_scope_from_address will result in accessing an unintialized variable. As a matter of fact, sd-dhcp-client ignores DHCP leases without an address so link_dhcp_set_routes probably will never be called without a valid address. --- diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index ae0f78d..9229b57 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -77,6 +77,10 @@ static int link_set_dhcp_routes(Link *link) { if (!link->network->dhcp_use_routes) return 0; + r = sd_dhcp_lease_get_address(link->dhcp_lease, &address); + if (r < 0) + return log_link_warning_errno(link, r, "DHCP error: could not get address: %m"); + r = sd_dhcp_lease_get_router(link->dhcp_lease, &gateway); if (r < 0 && r != -ENODATA) return log_link_warning_errno(link, r, "DHCP error: could not get gateway: %m"); @@ -85,10 +89,6 @@ static int link_set_dhcp_routes(Link *link) { _cleanup_route_free_ Route *route = NULL; _cleanup_route_free_ Route *route_gw = NULL; - r = sd_dhcp_lease_get_address(link->dhcp_lease, &address); - if (r < 0) - return log_link_warning_errno(link, r, "DHCP error: could not get address: %m"); - r = route_new(&route); if (r < 0) return log_link_error_errno(link, r, "Could not allocate route: %m");