diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-10-19 03:44:56 +0900 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-10-27 22:03:01 +0200 |
commit | 373cbfc8c6e9591b3c8cc12d58c4b31ac35ab24f (patch) | |
tree | 8fe75aed310756410e682439a349c56abcc123f3 | |
parent | 60dda78b7479a3b20e41e2acd1eaafa3d9b2dc97 (diff) | |
download | NetworkManager-373cbfc8c6e9591b3c8cc12d58c4b31ac35ab24f.tar.gz |
sd-dhcp6: fix argument and error handling of dhcp6_option_parse_status()
(cherry picked from commit 91c43f3978fa7c8341550b9ca279e460ba7e74e6)
-rw-r--r-- | src/systemd/src/libsystemd-network/dhcp6-option.c | 10 | ||||
-rw-r--r-- | src/systemd/src/libsystemd-network/sd-dhcp6-client.c | 9 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/systemd/src/libsystemd-network/dhcp6-option.c b/src/systemd/src/libsystemd-network/dhcp6-option.c index ff1cbf13d8..cfddefcb56 100644 --- a/src/systemd/src/libsystemd-network/dhcp6-option.c +++ b/src/systemd/src/libsystemd-network/dhcp6-option.c @@ -465,13 +465,15 @@ int dhcp6_option_parse_ia(DHCP6Option *iaoption, DHCP6IA *ia) { case SD_DHCP6_OPTION_STATUS_CODE: - status = dhcp6_option_parse_status(option, optlen); - if (status) { + status = dhcp6_option_parse_status(option, optlen + sizeof(DHCP6Option)); + if (status < 0) { + r = status; + goto error; + } + if (status > 0) { log_dhcp6_client(client, "IA status %d", status); - dhcp6_lease_free_ia(ia); - r = -EINVAL; goto error; } diff --git a/src/systemd/src/libsystemd-network/sd-dhcp6-client.c b/src/systemd/src/libsystemd-network/sd-dhcp6-client.c index c144b2cca4..fefe26efd3 100644 --- a/src/systemd/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/systemd/src/libsystemd-network/sd-dhcp6-client.c @@ -908,13 +908,14 @@ static int client_parse_message( break; case SD_DHCP6_OPTION_STATUS_CODE: - status = dhcp6_option_parse_status(option, optlen); - if (status) { + status = dhcp6_option_parse_status(option, optlen + sizeof(DHCP6Option)); + if (status < 0) + return status; + + if (status > 0) { log_dhcp6_client(client, "%s Status %s", dhcp6_message_type_to_string(message->type), dhcp6_message_status_to_string(status)); - dhcp6_lease_free_ia(&lease->ia); - dhcp6_lease_free_ia(&lease->pd); return -EINVAL; } |