From c4b6dda07fe6a7b6254a7968c346730455a85516 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 13 Jun 2018 17:34:09 +0200 Subject: [PATCH 1/3] sd-radv: close fd when destroying object --- src/libsystemd-network/sd-radv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index cf7fe0997b..28da73c8d5 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -77,6 +77,7 @@ _public_ sd_event *sd_radv_get_event(sd_radv *ra) { } static void radv_reset(sd_radv *ra) { + assert(ra); ra->timeout_event_source = sd_event_source_unref(ra->timeout_event_source); @@ -120,6 +121,9 @@ _public_ sd_radv *sd_radv_unref(sd_radv *ra) { radv_reset(ra); sd_radv_detach_event(ra); + + ra->fd = safe_close(ra->fd); + return mfree(ra); } From f5a5706ace2d7011538949e4e2ea63682a6fbc04 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 13 Jun 2018 17:34:41 +0200 Subject: [PATCH 2/3] sd-radv: normalize function parameters a bit Let's add "const" where we don't change structures passed. Also, we generally use "unsigned char" for IP prefix length values, do so here too. Previously different parts of the sd-radv.h API used different types for this. --- src/libsystemd-network/sd-radv.c | 6 +++--- src/systemd/sd-radv.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index 28da73c8d5..2386fbd644 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -611,8 +611,8 @@ _public_ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, bool dynamic) { } _public_ sd_radv_prefix *sd_radv_remove_prefix(sd_radv *ra, - struct in6_addr *prefix, - uint8_t prefixlen) { + const struct in6_addr *prefix, + unsigned char prefixlen) { sd_radv_prefix *cur, *next; assert_return(ra, NULL); @@ -772,7 +772,7 @@ _public_ sd_radv_prefix *sd_radv_prefix_unref(sd_radv_prefix *p) { return mfree(p); } -_public_ int sd_radv_prefix_set_prefix(sd_radv_prefix *p, struct in6_addr *in6_addr, +_public_ int sd_radv_prefix_set_prefix(sd_radv_prefix *p, const struct in6_addr *in6_addr, unsigned char prefixlen) { assert_return(p, -EINVAL); assert_return(in6_addr, -EINVAL); diff --git a/src/systemd/sd-radv.h b/src/systemd/sd-radv.h index e319a82dbf..9d4ba87447 100644 --- a/src/systemd/sd-radv.h +++ b/src/systemd/sd-radv.h @@ -64,8 +64,8 @@ int sd_radv_set_managed_information(sd_radv *ra, int managed); int sd_radv_set_other_information(sd_radv *ra, int other); int sd_radv_set_preference(sd_radv *ra, unsigned preference); int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, bool dynamic); -sd_radv_prefix *sd_radv_remove_prefix(sd_radv *ra, struct in6_addr *prefix, - uint8_t prefixlen); +sd_radv_prefix *sd_radv_remove_prefix(sd_radv *ra, const struct in6_addr *prefix, + unsigned char prefixlen); int sd_radv_set_rdnss(sd_radv *ra, uint32_t lifetime, const struct in6_addr *dns, size_t n_dns); int sd_radv_set_dnssl(sd_radv *ra, uint32_t lifetime, char **search_list); @@ -75,7 +75,7 @@ int sd_radv_prefix_new(sd_radv_prefix **ret); sd_radv_prefix *sd_radv_prefix_ref(sd_radv_prefix *ra); sd_radv_prefix *sd_radv_prefix_unref(sd_radv_prefix *ra); -int sd_radv_prefix_set_prefix(sd_radv_prefix *p, struct in6_addr *in6_addr, +int sd_radv_prefix_set_prefix(sd_radv_prefix *p, const struct in6_addr *in6_addr, unsigned char prefixlen); int sd_radv_prefix_set_onlink(sd_radv_prefix *p, int onlink); int sd_radv_prefix_set_address_autoconfiguration(sd_radv_prefix *p, From 97d7974b18f3d4b455e1608193e7a27e0c2ae163 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 13 Jun 2018 17:35:54 +0200 Subject: [PATCH 3/3] sd-radv: use strv_isempty() where we can --- src/libsystemd-network/sd-radv.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index 2386fbd644..54857dc786 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -679,9 +679,8 @@ _public_ int sd_radv_set_dnssl(sd_radv *ra, uint32_t lifetime, assert_return(ra, -EINVAL); - if (!search_list || *search_list == NULL) { + if (strv_isempty(search_list)) { ra->dnssl = mfree(ra->dnssl); - return 0; }