]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
ul_nl_addr_dup(): Fix address comparison
authorStanislav Brabec <sbrabec@suse.cz>
Sun, 5 Oct 2025 00:29:00 +0000 (02:29 +0200)
committerStanislav Brabec <sbrabec@suse.cz>
Sun, 5 Oct 2025 00:34:54 +0000 (02:34 +0200)
When duplicating struct ul_nl_addr, set address to ifa_local, if it is set
to ifa_local in the source. This fixes the address for PtP IPv4 network
interfaces and avoids UL_NL_SOFT_ERROR during address removal.

Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
lib/netlink.c

index 3def42e5080ce41b5eb1039fd3841c1aaa209b3a..f8ac2c4c8bf8cf1d262236d07a1a535ee014fcca 100644 (file)
@@ -328,7 +328,7 @@ int ul_nl_close(struct ul_nl_data *nl) {
        return close(nl->fd);
 }
 
-struct ul_nl_addr *ul_nl_addr_dup (struct ul_nl_addr *addr) {
+struct ul_nl_addr *ul_nl_addr_dup(struct ul_nl_addr *addr) {
        struct ul_nl_addr *newaddr;
        newaddr = calloc(1, sizeof(struct ul_nl_addr));
        if (!newaddr)
@@ -348,7 +348,7 @@ struct ul_nl_addr *ul_nl_addr_dup (struct ul_nl_addr *addr) {
                memcpy(newaddr->ifa_local, addr->ifa_local,
                       addr->ifa_local_len);
        }
-       if (&(addr->ifa_address) == &(addr->ifa_local))
+       if (addr->address == addr->ifa_local)
                newaddr->address = newaddr->ifa_local;
        else
                newaddr->address = newaddr->ifa_address;
@@ -360,7 +360,7 @@ error:
        return NULL;
 }
 
-void ul_nl_addr_free (struct ul_nl_addr *addr) {
+void ul_nl_addr_free(struct ul_nl_addr *addr) {
        if (addr) {
                free(addr->ifa_address);
                free(addr->ifa_local);