From f814cd80dec288954dea5593715b51daed8f1034 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 7 Feb 2022 01:24:01 +0900 Subject: [PATCH] sd-dhcp6-client: make state transition stricter --- src/libsystemd-network/sd-dhcp6-client.c | 43 ++++++++++++------------ 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index 0ca1be86b6b..25091e1b604 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -1328,7 +1328,26 @@ static int client_set_state(sd_dhcp6_client *client, DHCP6State state) { assert_return(client, -EINVAL); assert_return(client->event, -EINVAL); assert_return(client->ifindex > 0, -EINVAL); - assert_return(client->state != state, -EINVAL); + + switch (state) { + case DHCP6_STATE_INFORMATION_REQUEST: + case DHCP6_STATE_SOLICITATION: + assert(client->state == DHCP6_STATE_STOPPED); + break; + case DHCP6_STATE_REQUEST: + assert(client->state == DHCP6_STATE_SOLICITATION); + break; + case DHCP6_STATE_RENEW: + assert(client->state == DHCP6_STATE_BOUND); + break; + case DHCP6_STATE_REBIND: + assert(IN_SET(client->state, DHCP6_STATE_BOUND, DHCP6_STATE_RENEW)); + break; + case DHCP6_STATE_STOPPED: + case DHCP6_STATE_BOUND: + default: + assert_not_reached(); + } (void) event_source_disable(client->timeout_resend_expire); (void) event_source_disable(client->timeout_resend); @@ -1357,27 +1376,7 @@ static int client_set_state(sd_dhcp6_client *client, DHCP6State state) { goto error; } - switch (state) { - case DHCP6_STATE_SOLICITATION: - client->state = DHCP6_STATE_SOLICITATION; - - break; - - case DHCP6_STATE_INFORMATION_REQUEST: - case DHCP6_STATE_REQUEST: - case DHCP6_STATE_RENEW: - case DHCP6_STATE_REBIND: - - client->state = state; - - break; - - case DHCP6_STATE_STOPPED: - case DHCP6_STATE_BOUND: - default: - assert_not_reached(); - } - + client->state = state; client->transaction_id = random_u32() & htobe32(0x00ffffff); client->transaction_start = time_now; -- 2.47.3