Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package wireguard-tools for openSUSE:Factory 
checked in at 2025-07-15 16:45:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wireguard-tools (Old)
 and      /work/SRC/openSUSE:Factory/.wireguard-tools.new.7373 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wireguard-tools"

Tue Jul 15 16:45:49 2025 rev:20 rq:1293281 version:1.0.20250521

Changes:
--------
--- /work/SRC/openSUSE:Factory/wireguard-tools/wireguard-tools.changes  
2024-02-21 17:57:03.988713787 +0100
+++ 
/work/SRC/openSUSE:Factory/.wireguard-tools.new.7373/wireguard-tools.changes    
    2025-07-15 16:47:12.099927062 +0200
@@ -1,0 +2,20 @@
+Wed Jun 18 12:31:20 UTC 2025 - Martin Hauke <mar...@gmx.de>
+
+- Update to version 1.0.20250521
+  * config: handle strdup failure.
+  * wg-quick: linux: add 'dev' to 'ip link add' to avoid keyword
+    conflicts.
+  * ipc: add stub for allowedips flags on other platforms.
+  * ipc: linux: support incremental allowed ips updates.
+  * ipc: linux: enforce IFNAMSIZ limit.
+  * man: set private key in PreUp rather than PostUp.
+  * wg-quick: run PreUp hook after creating interface.
+  * show: fix show all endpoints output.
+  * show: apply const to right part of pointer.
+  * wg-quick: linux: prevent traffic from momentarily leaking into
+    tunnel.
+  * reresolve-dns: use $EPOCHSECONDS instead of $(date +%s).
+  * embeddable-wg-library: add named wg_endpoint union.
+  * ipc: use more clever PnP enumerator.
+
+-------------------------------------------------------------------

Old:
----
  wireguard-tools-1.0.20210914.tar.asc
  wireguard-tools-1.0.20210914.tar.xz

New:
----
  wireguard-tools-1.0.20250521.tar.asc
  wireguard-tools-1.0.20250521.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ wireguard-tools.spec ++++++
--- /var/tmp/diff_new_pack.qCgvud/_old  2025-07-15 16:47:14.144011717 +0200
+++ /var/tmp/diff_new_pack.qCgvud/_new  2025-07-15 16:47:14.148011882 +0200
@@ -1,8 +1,8 @@
 #
 # spec file for package wireguard-tools
 #
-# Copyright (c) 2023 SUSE LLC
-# Copyright (c) 2020-2021, Martin Hauke <mar...@gmx.de>
+# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2020-2025, Martin Hauke <mar...@gmx.de>
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 
 Name:           wireguard-tools
-Version:        1.0.20210914
+Version:        1.0.20250521
 Release:        0
 Summary:        WireGuard userspace tools
 License:        GPL-2.0-only

++++++ WireGuard.keyring ++++++
--- /var/tmp/diff_new_pack.qCgvud/_old  2025-07-15 16:47:14.292017847 +0200
+++ /var/tmp/diff_new_pack.qCgvud/_new  2025-07-15 16:47:14.296018012 +0200
@@ -13,435 +13,41 @@
 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
-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
-/903kOBiCx8/LSTyx7c=
-=DIS2
+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
+RSEznTsacpI2mIY3eQ==
+=t5+P
 -----END PGP PUBLIC KEY BLOCK-----
 

++++++ wireguard-tools-1.0.20210914.tar.xz -> 
wireguard-tools-1.0.20250521.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireguard-tools-1.0.20210914/contrib/embeddable-wg-library/wireguard.h 
new/wireguard-tools-1.0.20250521/contrib/embeddable-wg-library/wireguard.h
--- old/wireguard-tools-1.0.20210914/contrib/embeddable-wg-library/wireguard.h  
2021-09-14 00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/contrib/embeddable-wg-library/wireguard.h  
2025-05-21 01:05:38.000000000 +0200
@@ -40,17 +40,19 @@
        WGPEER_HAS_PERSISTENT_KEEPALIVE_INTERVAL = 1U << 4
 };
 
+typedef union wg_endpoint {
+       struct sockaddr addr;
+       struct sockaddr_in addr4;
+       struct sockaddr_in6 addr6;
+} wg_endpoint;
+
 typedef struct wg_peer {
        enum wg_peer_flags flags;
 
        wg_key public_key;
        wg_key preshared_key;
 
-       union {
-               struct sockaddr addr;
-               struct sockaddr_in addr4;
-               struct sockaddr_in6 addr6;
-       } endpoint;
+       wg_endpoint endpoint;
 
        struct timespec64 last_handshake_time;
        uint64_t rx_bytes, tx_bytes;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireguard-tools-1.0.20210914/contrib/reresolve-dns/reresolve-dns.sh 
new/wireguard-tools-1.0.20250521/contrib/reresolve-dns/reresolve-dns.sh
--- old/wireguard-tools-1.0.20210914/contrib/reresolve-dns/reresolve-dns.sh     
2021-09-14 00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/contrib/reresolve-dns/reresolve-dns.sh     
2025-05-21 01:05:38.000000000 +0200
@@ -16,7 +16,7 @@
 process_peer() {
        [[ $PEER_SECTION -ne 1 || -z $PUBLIC_KEY || -z $ENDPOINT ]] && return 0
        [[ $(wg show "$INTERFACE" latest-handshakes) =~ ${PUBLIC_KEY//+/\\+}\   
([0-9]+) ]] || return 0
-       (( ($(date +%s) - ${BASH_REMATCH[1]}) > 135 )) || return 0
+       (( ($EPOCHSECONDS - ${BASH_REMATCH[1]}) > 135 )) || return 0
        wg set "$INTERFACE" peer "$PUBLIC_KEY" endpoint "$ENDPOINT"
        reset_peer_section
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/Makefile 
new/wireguard-tools-1.0.20250521/src/Makefile
--- old/wireguard-tools-1.0.20210914/src/Makefile       2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/Makefile       2025-05-21 
01:05:38.000000000 +0200
@@ -39,7 +39,7 @@
 
 CFLAGS ?= -O3
 ifneq ($(wildcard uapi/$(PLATFORM)/.),)
-CFLAGS += -idirafter uapi/$(PLATFORM)
+CFLAGS += -isystem uapi/$(PLATFORM)
 endif
 CFLAGS += -std=gnu99 -D_GNU_SOURCE
 CFLAGS += -Wall -Wextra
@@ -62,7 +62,7 @@
 CC := x86_64-w64-mingw32-clang
 WINDRES := $(shell $(CC) $(CFLAGS) -print-prog-name=windres 2>/dev/null)
 CFLAGS += -Iwincompat/include -include wincompat/compat.h -DWINVER=0x0601 
-D_WIN32_WINNT=0x0601 -flto
-LDLIBS += -lws2_32 -lsetupapi -lole32 -ladvapi32 -Lwincompat
+LDLIBS += -lws2_32 -lsetupapi -lole32 -ladvapi32 -lntdll -Lwincompat
 LDFLAGS += -flto -Wl,--dynamicbase -Wl,--nxcompat -Wl,--tsaware -mconsole
 LDFLAGS += -Wl,--major-os-version=6 -Wl,--minor-os-version=1 
-Wl,--major-subsystem-version=6 -Wl,--minor-subsystem-version=1
 # The use of -Wl,/delayload: here implies we're using llvm-mingw
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/config.c 
new/wireguard-tools-1.0.20250521/src/config.c
--- old/wireguard-tools-1.0.20210914/src/config.c       2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/config.c       2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
@@ -337,6 +337,20 @@
        return true;
 }
 
+static inline void parse_ip_prefix(struct wgpeer *peer, uint32_t *flags, char 
**mask)
+{
+       /* If the IP is prefixed with either '+' or '-' consider this an
+        * incremental change. Disable WGPEER_REPLACE_ALLOWEDIPS. */
+       switch ((*mask)[0]) {
+       case '-':
+               *flags |= WGALLOWEDIP_REMOVE_ME;
+               /* fall through */
+       case '+':
+               peer->flags &= ~WGPEER_REPLACE_ALLOWEDIPS;
+               ++(*mask);
+       }
+}
+
 static inline bool parse_allowedips(struct wgpeer *peer, struct wgallowedip 
**last_allowedip, const char *value)
 {
        struct wgallowedip *allowedip = *last_allowedip, *new_allowedip;
@@ -353,10 +367,18 @@
        }
        sep = mutable;
        while ((mask = strsep(&sep, ","))) {
+               uint32_t flags = 0;
                unsigned long cidr;
                char *end, *ip;
 
+               parse_ip_prefix(peer, &flags, &mask);
+
                saved_entry = strdup(mask);
+               if (!saved_entry) {
+                       perror("strdup");
+                       free(mutable);
+                       return false;
+               }
                ip = strsep(&mask, "/");
 
                new_allowedip = calloc(1, sizeof(*new_allowedip));
@@ -387,6 +409,7 @@
                else
                        goto err;
                new_allowedip->cidr = cidr;
+               new_allowedip->flags = flags;
 
                if (!validate_netmask(new_allowedip))
                        fprintf(stderr, "Warning: AllowedIP has nonzero host 
part: %s/%s\n", ip, mask);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/config.h 
new/wireguard-tools-1.0.20250521/src/config.h
--- old/wireguard-tools-1.0.20210914/src/config.h       2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/config.h       2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/containers.h 
new/wireguard-tools-1.0.20250521/src/containers.h
--- old/wireguard-tools-1.0.20210914/src/containers.h   2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/containers.h   2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
@@ -28,6 +28,10 @@
        int64_t tv_nsec;
 };
 
+enum {
+       WGALLOWEDIP_REMOVE_ME = 1U << 0,
+};
+
 struct wgallowedip {
        uint16_t family;
        union {
@@ -35,6 +39,7 @@
                struct in6_addr ip6;
        };
        uint8_t cidr;
+       uint32_t flags;
        struct wgallowedip *next_allowedip;
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/ctype.h 
new/wireguard-tools-1.0.20250521/src/ctype.h
--- old/wireguard-tools-1.0.20210914/src/ctype.h        2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/ctype.h        2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/curve25519.c 
new/wireguard-tools-1.0.20250521/src/curve25519.c
--- old/wireguard-tools-1.0.20210914/src/curve25519.c   2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/curve25519.c   2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2018-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/curve25519.h 
new/wireguard-tools-1.0.20250521/src/curve25519.h
--- old/wireguard-tools-1.0.20210914/src/curve25519.h   2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/curve25519.h   2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/encoding.c 
new/wireguard-tools-1.0.20250521/src/encoding.c
--- old/wireguard-tools-1.0.20210914/src/encoding.c     2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/encoding.c     2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/encoding.h 
new/wireguard-tools-1.0.20250521/src/encoding.h
--- old/wireguard-tools-1.0.20210914/src/encoding.h     2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/encoding.h     2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/genkey.c 
new/wireguard-tools-1.0.20250521/src/genkey.c
--- old/wireguard-tools-1.0.20210914/src/genkey.c       2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/genkey.c       2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/ipc-freebsd.h 
new/wireguard-tools-1.0.20250521/src/ipc-freebsd.h
--- old/wireguard-tools-1.0.20210914/src/ipc-freebsd.h  2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/ipc-freebsd.h  2025-05-21 
01:05:38.000000000 +0200
@@ -4,9 +4,10 @@
  *
  */
 
+#include <assert.h>
 #include <sys/nv.h>
 #include <sys/sockio.h>
-#include <dev/if_wg/if_wg.h>
+#include <dev/wg/if_wg.h>
 
 #define IPC_SUPPORTS_KERNEL_INTERFACE
 
@@ -14,7 +15,7 @@
 {
        static int sock = -1;
        if (sock < 0)
-               sock = socket(AF_INET, SOCK_DGRAM, 0);
+               sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
        return sock;
 }
 
@@ -118,7 +119,7 @@
                goto skip_peers;
        for (i = 0; i < peer_count; ++i) {
                struct wgpeer *peer;
-               struct wgallowedip *aip;
+               struct wgallowedip *aip = NULL;
                const nvlist_t *const *nvl_aips;
                size_t aip_count, j;
 
@@ -169,11 +170,13 @@
                if (!aip_count || !nvl_aips)
                        goto skip_allowed_ips;
                for (j = 0; j < aip_count; ++j) {
+                       if (!nvlist_exists_number(nvl_aips[j], "cidr"))
+                               continue;
+                       if (!nvlist_exists_binary(nvl_aips[j], "ipv4") && 
!nvlist_exists_binary(nvl_aips[j], "ipv6"))
+                               continue;
                        aip = calloc(1, sizeof(*aip));
                        if (!aip)
                                goto err_allowed_ips;
-                       if (!nvlist_exists_number(nvl_aips[j], "cidr"))
-                               continue;
                        number = nvlist_get_number(nvl_aips[j], "cidr");
                        if (nvlist_exists_binary(nvl_aips[j], "ipv4")) {
                                binary = nvlist_get_binary(nvl_aips[j], "ipv4", 
&size);
@@ -184,7 +187,8 @@
                                aip->family = AF_INET;
                                aip->cidr = number;
                                memcpy(&aip->ip4, binary, sizeof(aip->ip4));
-                       } else if (nvlist_exists_binary(nvl_aips[j], "ipv6")) {
+                       } else {
+                               assert(nvlist_exists_binary(nvl_aips[j], 
"ipv6"));
                                binary = nvlist_get_binary(nvl_aips[j], "ipv6", 
&size);
                                if (!binary || number > 128) {
                                        ret = EINVAL;
@@ -193,14 +197,14 @@
                                aip->family = AF_INET6;
                                aip->cidr = number;
                                memcpy(&aip->ip6, binary, sizeof(aip->ip6));
-                       } else
-                               continue;
+                       }
 
                        if (!peer->first_allowedip)
                                peer->first_allowedip = aip;
                        else
                                peer->last_allowedip->next_allowedip = aip;
                        peer->last_allowedip = aip;
+                       aip = NULL;
                        continue;
 
                err_allowed_ips:
@@ -209,6 +213,9 @@
                        free(aip);
                        goto err_peer;
                }
+
+               /* Nothing leaked, hopefully -- ownership transferred or aip 
freed. */
+               assert(aip == NULL);
        skip_allowed_ips:
                if (!dev->first_peer)
                        dev->first_peer = peer;
@@ -300,6 +307,11 @@
                        nvl_aips[j] = nvlist_create(0);
                        if (!nvl_aips[j])
                                goto err_peer;
+                       if (aip->flags) {
+                               //TODO: implement me
+                               ret = -EOPNOTSUPP;
+                               goto err_peer;
+                       }
                        nvlist_add_number(nvl_aips[j], "cidr", aip->cidr);
                        if (aip->family == AF_INET)
                                nvlist_add_binary(nvl_aips[j], "ipv4", 
&aip->ip4, sizeof(aip->ip4));
@@ -322,6 +334,7 @@
                        nvlist_destroy(nvl_aips[j]);
                free(nvl_aips);
                nvlist_destroy(nvl_peers[i]);
+               nvl_peers[i] = NULL;
                goto err;
        }
        if (i) {
@@ -329,9 +342,11 @@
                for (i = 0; i < peer_count; ++i)
                        nvlist_destroy(nvl_peers[i]);
                free(nvl_peers);
+               nvl_peers = NULL;
        }
        wgd.wgd_data = nvlist_pack(nvl_device, &wgd.wgd_size);
        nvlist_destroy(nvl_device);
+       nvl_device = NULL;
        if (!wgd.wgd_data)
                goto err;
        s = get_dgram_socket();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/ipc-linux.h 
new/wireguard-tools-1.0.20250521/src/ipc-linux.h
--- old/wireguard-tools-1.0.20210914/src/ipc-linux.h    2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/ipc-linux.h    2025-05-21 
01:05:38.000000000 +0200
@@ -228,6 +228,8 @@
                                }
                                if (!mnl_attr_put_u8_check(nlh, 
SOCKET_BUFFER_SIZE, WGALLOWEDIP_A_CIDR_MASK, allowedip->cidr))
                                        goto toobig_allowedips;
+                               if (allowedip->flags && 
!mnl_attr_put_u32_check(nlh, SOCKET_BUFFER_SIZE, WGALLOWEDIP_A_FLAGS, 
allowedip->flags))
+                                       goto toobig_allowedips;
                                mnl_attr_nest_end(nlh, allowedip_nest);
                                allowedip_nest = NULL;
                        }
@@ -479,6 +481,12 @@
        struct nlmsghdr *nlh;
        struct mnlg_socket *nlg;
 
+       /* libmnl doesn't check the buffer size, so enforce that before using. 
*/
+       if (strlen(iface) >= IFNAMSIZ) {
+               errno = ENAMETOOLONG;
+               return -ENAMETOOLONG;
+       }
+
 try_again:
        ret = 0;
        *device = calloc(1, sizeof(**device));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/ipc-openbsd.h 
new/wireguard-tools-1.0.20250521/src/ipc-openbsd.h
--- old/wireguard-tools-1.0.20210914/src/ipc-openbsd.h  2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/ipc-openbsd.h  2025-05-21 
01:05:38.000000000 +0200
@@ -252,6 +252,11 @@
                aip_count = 0;
                wg_aip = &wg_peer->p_aips[0];
                for_each_wgallowedip(peer, aip) {
+                       if (aip->flags) {
+                               //TODO: implement me
+                               errno = EOPNOTSUPP;
+                               goto out;
+                       }
                        wg_aip->a_af = aip->family;
                        wg_aip->a_cidr = aip->cidr;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/ipc-uapi.h 
new/wireguard-tools-1.0.20250521/src/ipc-uapi.h
--- old/wireguard-tools-1.0.20210914/src/ipc-uapi.h     2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/ipc-uapi.h     2025-05-21 
01:05:38.000000000 +0200
@@ -89,7 +89,7 @@
                                        continue;
                        } else
                                continue;
-                       fprintf(f, "allowed_ip=%s/%d\n", ip, allowedip->cidr);
+                       fprintf(f, "allowed_ip=%s%s/%d\n", (allowedip->flags & 
WGALLOWEDIP_REMOVE_ME) ? "-" : "", ip, allowedip->cidr);
                }
        }
        fprintf(f, "\n");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/ipc-windows.h 
new/wireguard-tools-1.0.20250521/src/ipc-windows.h
--- old/wireguard-tools-1.0.20210914/src/ipc-windows.h  2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/ipc-windows.h  2025-05-21 
01:05:38.000000000 +0200
@@ -19,10 +19,11 @@
 static bool have_cached_kernel_interfaces;
 static struct hashtable cached_kernel_interfaces;
 static const DEVPROPKEY devpkey_name = DEVPKEY_WG_NAME;
+extern bool is_win7;
 
 static int kernel_get_wireguard_interfaces(struct string_list *list)
 {
-       HDEVINFO dev_info = SetupDiGetClassDevsExW(&GUID_DEVCLASS_NET, NULL, 
NULL, DIGCF_PRESENT, NULL, NULL, NULL);
+       HDEVINFO dev_info = SetupDiGetClassDevsExW(&GUID_DEVCLASS_NET, is_win7 
? L"ROOT\\WIREGUARD" : L"SWD\\WireGuard", NULL, DIGCF_PRESENT, NULL, NULL, 
NULL);
        bool will_have_cached_kernel_interfaces = true;
 
        if (dev_info == INVALID_HANDLE_VALUE) {
@@ -31,9 +32,8 @@
        }
 
        for (DWORD i = 0;; ++i) {
-               bool found = false;
-               DWORD buf_len = 0, value_type;
-               WCHAR *buf = NULL, adapter_name[MAX_ADAPTER_NAME];
+               DWORD buf_len;
+               WCHAR adapter_name[MAX_ADAPTER_NAME];
                SP_DEVINFO_DATA dev_info_data = { .cbSize = 
sizeof(SP_DEVINFO_DATA) };
                DEVPROPTYPE prop_type;
                ULONG status, problem_code;
@@ -46,31 +46,6 @@
                        continue;
                }
 
-               while (!SetupDiGetDeviceRegistryPropertyW(dev_info, 
&dev_info_data, SPDRP_HARDWAREID, &value_type, (BYTE *)buf, buf_len, &buf_len)) 
{
-                       free(buf);
-                       buf = NULL;
-                       if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-                               break;
-                       buf = malloc(buf_len);
-                       if (!buf)
-                               break;
-               }
-
-               if (!buf || value_type != REG_MULTI_SZ || buf_len < 
sizeof(*buf) * 2 || buf[buf_len / sizeof(*buf) - 1] || buf[buf_len / 
sizeof(*buf) - 2]) {
-                       free(buf);
-                       continue;
-               }
-
-               for (WCHAR *item = buf; *item; item += wcslen(item) + 1) {
-                       if (!_wcsicmp(item, L"wireguard")) {
-                               found = true;
-                               break;
-                       }
-               }
-               free(buf);
-               if (!found)
-                       continue;
-
                if (!SetupDiGetDevicePropertyW(dev_info, &dev_info_data, 
&devpkey_name,
                                               &prop_type, (PBYTE)adapter_name,
                                               sizeof(adapter_name), NULL, 0) ||
@@ -155,14 +130,14 @@
                }
        }
 
-       dev_info = SetupDiGetClassDevsExW(&GUID_DEVCLASS_NET, NULL, NULL, 
DIGCF_PRESENT, NULL, NULL, NULL);
+       dev_info = SetupDiGetClassDevsExW(&GUID_DEVCLASS_NET, is_win7 ? 
L"ROOT\\WIREGUARD" : L"SWD\\WireGuard", NULL, DIGCF_PRESENT, NULL, NULL, NULL);
        if (dev_info == INVALID_HANDLE_VALUE)
                return NULL;
 
        for (DWORD i = 0; !interfaces; ++i) {
-               bool found = false;
-               DWORD buf_len = 0, value_type;
-               WCHAR *buf = NULL, adapter_name[MAX_ADAPTER_NAME];
+               bool found;
+               DWORD buf_len;
+               WCHAR *buf, adapter_name[MAX_ADAPTER_NAME];
                SP_DEVINFO_DATA dev_info_data = { .cbSize = 
sizeof(SP_DEVINFO_DATA) };
                DEVPROPTYPE prop_type;
                char *interface_name;
@@ -173,31 +148,6 @@
                        continue;
                }
 
-               while (!SetupDiGetDeviceRegistryPropertyW(dev_info, 
&dev_info_data, SPDRP_HARDWAREID, &value_type, (BYTE *)buf, buf_len, &buf_len)) 
{
-                       free(buf);
-                       buf = NULL;
-                       if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-                               break;
-                       buf = malloc(buf_len);
-                       if (!buf)
-                               break;
-               }
-
-               if (!buf || value_type != REG_MULTI_SZ || buf_len < 
sizeof(*buf) * 2 || buf[buf_len / sizeof(*buf) - 1] || buf[buf_len / 
sizeof(*buf) - 2]) {
-                       free(buf);
-                       continue;
-               }
-
-               for (WCHAR *item = buf; *item; item += wcslen(item) + 1) {
-                       if (!_wcsicmp(item, L"wireguard")) {
-                               found = true;
-                               break;
-                       }
-               }
-               free(buf);
-               if (!found)
-                       continue;
-
                if (!SetupDiGetDevicePropertyW(dev_info, &dev_info_data, 
&devpkey_name,
                                               &prop_type, (PBYTE)adapter_name,
                                               sizeof(adapter_name), NULL, 0) ||
@@ -468,6 +418,12 @@
                aip_count = 0;
                wg_aip = (void *)wg_peer + sizeof(WG_IOCTL_PEER);
                for_each_wgallowedip(peer, aip) {
+                       if (aip->flags) {
+                               //TODO: implement me
+                               errno = EOPNOTSUPP;
+                               goto out;
+                       }
+
                        wg_aip->AddressFamily = aip->family;
                        wg_aip->Cidr = aip->cidr;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/ipc.c 
new/wireguard-tools-1.0.20250521/src/ipc.c
--- old/wireguard-tools-1.0.20210914/src/ipc.c  2021-09-14 00:43:31.000000000 
+0200
+++ new/wireguard-tools-1.0.20250521/src/ipc.c  2025-05-21 01:05:38.000000000 
+0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/ipc.h 
new/wireguard-tools-1.0.20250521/src/ipc.h
--- old/wireguard-tools-1.0.20210914/src/ipc.h  2021-09-14 00:43:31.000000000 
+0200
+++ new/wireguard-tools-1.0.20250521/src/ipc.h  2025-05-21 01:05:38.000000000 
+0200
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/man/wg-quick.8 
new/wireguard-tools-1.0.20250521/src/man/wg-quick.8
--- old/wireguard-tools-1.0.20210914/src/man/wg-quick.8 2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/man/wg-quick.8 2025-05-21 
01:05:38.000000000 +0200
@@ -168,7 +168,7 @@
 Or, perhaps it is desirable to store private keys in encrypted form, such as 
through use of
 .BR pass (1):
 
-    \fBPostUp = wg set %i private-key <(pass WireGuard/private-keys/%i)\fP
+    \fBPreUp = wg set %i private-key <(pass WireGuard/private-keys/%i)\fP
 .br
 
 For use on a server, the following is a more complicated example involving 
multiple peers:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/man/wg.8 
new/wireguard-tools-1.0.20250521/src/man/wg.8
--- old/wireguard-tools-1.0.20210914/src/man/wg.8       2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/man/wg.8       2025-05-21 
01:05:38.000000000 +0200
@@ -55,7 +55,7 @@
 Shows the current configuration of \fI<interface>\fP in the format described
 by \fICONFIGURATION FILE FORMAT\fP below.
 .TP
-\fBset\fP \fI<interface>\fP [\fIlisten-port\fP \fI<port>\fP] [\fIfwmark\fP 
\fI<fwmark>\fP] [\fIprivate-key\fP \fI<file-path>\fP] [\fIpeer\fP 
\fI<base64-public-key>\fP [\fIremove\fP] [\fIpreshared-key\fP 
\fI<file-path>\fP] [\fIendpoint\fP \fI<ip>:<port>\fP] 
[\fIpersistent-keepalive\fP \fI<interval seconds>\fP] [\fIallowed-ips\fP 
\fI<ip1>/<cidr1>\fP[,\fI<ip2>/<cidr2>\fP]...] ]...
+\fBset\fP \fI<interface>\fP [\fIlisten-port\fP \fI<port>\fP] [\fIfwmark\fP 
\fI<fwmark>\fP] [\fIprivate-key\fP \fI<file-path>\fP] [\fIpeer\fP 
\fI<base64-public-key>\fP [\fIremove\fP] [\fIpreshared-key\fP 
\fI<file-path>\fP] [\fIendpoint\fP \fI<ip>:<port>\fP] 
[\fIpersistent-keepalive\fP \fI<interval seconds>\fP] [\fIallowed-ips\fP 
\fI[+|-]<ip1>/<cidr1>\fP[,\fI[+|-]<ip2>/<cidr2>\fP]...] ]...
 Sets configuration values for the specified \fI<interface>\fP. Multiple
 \fIpeer\fPs may be specified, and if the \fIremove\fP argument is given
 for a peer, that peer is removed, not configured. If \fIlisten-port\fP
@@ -72,7 +72,11 @@
 it adds an additional layer of symmetric-key cryptography to be mixed into
 the already existing public-key cryptography, for post-quantum resistance.
 If \fIallowed-ips\fP is specified, but the value is the empty string, all
-allowed ips are removed from the peer. The use of \fIpersistent-keepalive\fP
+allowed ips are removed from the peer. By default, \fIallowed-ips\fP replaces
+a peer's allowed ips. If + or - is prepended to any of the ips then
+the update is incremental; ips prefixed with '+' or '' are added to the peer's
+allowed ips if not present while ips prefixed with '-' are removed if present.
+The use of \fIpersistent-keepalive\fP
 is optional and is by default off; setting it to 0 or "off" disables it.
 Otherwise it represents, in seconds, between 1 and 65535 inclusive, how often
 to send an authenticated empty packet to the peer, for the purpose of keeping
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/pubkey.c 
new/wireguard-tools-1.0.20250521/src/pubkey.c
--- old/wireguard-tools-1.0.20210914/src/pubkey.c       2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/pubkey.c       2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/set.c 
new/wireguard-tools-1.0.20250521/src/set.c
--- old/wireguard-tools-1.0.20210914/src/set.c  2021-09-14 00:43:31.000000000 
+0200
+++ new/wireguard-tools-1.0.20250521/src/set.c  2025-05-21 01:05:38.000000000 
+0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
@@ -18,7 +18,7 @@
        int ret = 1;
 
        if (argc < 3) {
-               fprintf(stderr, "Usage: %s %s <interface> [listen-port <port>] 
[fwmark <mark>] [private-key <file path>] [peer <base64 public key> [remove] 
[preshared-key <file path>] [endpoint <ip>:<port>] [persistent-keepalive 
<interval seconds>] [allowed-ips <ip1>/<cidr1>[,<ip2>/<cidr2>]...] ]...\n", 
PROG_NAME, argv[0]);
+               fprintf(stderr, "Usage: %s %s <interface> [listen-port <port>] 
[fwmark <mark>] [private-key <file path>] [peer <base64 public key> [remove] 
[preshared-key <file path>] [endpoint <ip>:<port>] [persistent-keepalive 
<interval seconds>] [allowed-ips [+|-]<ip1>/<cidr1>[,[+|-]<ip2>/<cidr2>]...] 
]...\n", PROG_NAME, argv[0]);
                return 1;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/setconf.c 
new/wireguard-tools-1.0.20250521/src/setconf.c
--- old/wireguard-tools-1.0.20210914/src/setconf.c      2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/setconf.c      2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/show.c 
new/wireguard-tools-1.0.20250521/src/show.c
--- old/wireguard-tools-1.0.20210914/src/show.c 2021-09-14 00:43:31.000000000 
+0200
+++ new/wireguard-tools-1.0.20250521/src/show.c 2025-05-21 01:05:38.000000000 
+0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
@@ -27,7 +27,7 @@
 static int peer_cmp(const void *first, const void *second)
 {
        time_t diff;
-       const struct wgpeer *a = *(const void **)first, *b = *(const void 
**)second;
+       const struct wgpeer *a = *(void *const *)first, *b = *(void *const 
*)second;
 
        if (!a->last_handshake_time.tv_sec && !a->last_handshake_time.tv_nsec 
&& (b->last_handshake_time.tv_sec || b->last_handshake_time.tv_nsec))
                return 1;
@@ -312,9 +312,9 @@
                else
                        printf("off\n");
        } else if (!strcmp(param, "endpoints")) {
-               if (with_interface)
-                       printf("%s\t", device->name);
                for_each_wgpeer(device, peer) {
+                       if (with_interface)
+                               printf("%s\t", device->name);
                        printf("%s\t", key(peer->public_key));
                        if (peer->endpoint.addr.sa_family == AF_INET || 
peer->endpoint.addr.sa_family == AF_INET6)
                                printf("%s\n", endpoint(&peer->endpoint.addr));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/showconf.c 
new/wireguard-tools-1.0.20250521/src/showconf.c
--- old/wireguard-tools-1.0.20210914/src/showconf.c     2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/showconf.c     2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/subcommands.h 
new/wireguard-tools-1.0.20250521/src/subcommands.h
--- old/wireguard-tools-1.0.20210914/src/subcommands.h  2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/subcommands.h  2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/terminal.c 
new/wireguard-tools-1.0.20250521/src/terminal.c
--- old/wireguard-tools-1.0.20210914/src/terminal.c     2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/terminal.c     2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/terminal.h 
new/wireguard-tools-1.0.20250521/src/terminal.h
--- old/wireguard-tools-1.0.20210914/src/terminal.h     2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/terminal.h     2025-05-21 
01:05:38.000000000 +0200
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireguard-tools-1.0.20210914/src/uapi/freebsd/dev/if_wg/if_wg.h 
new/wireguard-tools-1.0.20250521/src/uapi/freebsd/dev/if_wg/if_wg.h
--- old/wireguard-tools-1.0.20210914/src/uapi/freebsd/dev/if_wg/if_wg.h 
2021-09-14 00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/uapi/freebsd/dev/if_wg/if_wg.h 
1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-#ifndef __IF_WG_H__
-#define __IF_WG_H__
-
-#include <net/if.h>
-#include <netinet/in.h>
-
-struct wg_data_io {
-       char wgd_name[IFNAMSIZ];
-       void *wgd_data;
-       size_t wgd_size;
-};
-
-#define SIOCSWG _IOWR('i', 210, struct wg_data_io)
-#define SIOCGWG _IOWR('i', 211, struct wg_data_io)
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireguard-tools-1.0.20210914/src/uapi/freebsd/dev/wg/if_wg.h 
new/wireguard-tools-1.0.20250521/src/uapi/freebsd/dev/wg/if_wg.h
--- old/wireguard-tools-1.0.20210914/src/uapi/freebsd/dev/wg/if_wg.h    
1970-01-01 01:00:00.000000000 +0100
+++ new/wireguard-tools-1.0.20250521/src/uapi/freebsd/dev/wg/if_wg.h    
2025-05-21 01:05:38.000000000 +0200
@@ -0,0 +1,16 @@
+#ifndef __IF_WG_H__
+#define __IF_WG_H__
+
+#include <net/if.h>
+#include <netinet/in.h>
+
+struct wg_data_io {
+       char wgd_name[IFNAMSIZ];
+       void *wgd_data;
+       size_t wgd_size;
+};
+
+#define SIOCSWG _IOWR('i', 210, struct wg_data_io)
+#define SIOCGWG _IOWR('i', 211, struct wg_data_io)
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireguard-tools-1.0.20210914/src/uapi/linux/linux/wireguard.h 
new/wireguard-tools-1.0.20250521/src/uapi/linux/linux/wireguard.h
--- old/wireguard-tools-1.0.20210914/src/uapi/linux/linux/wireguard.h   
2021-09-14 00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/uapi/linux/linux/wireguard.h   
2025-05-21 01:05:38.000000000 +0200
@@ -101,6 +101,10 @@
  *                    WGALLOWEDIP_A_FAMILY: NLA_U16
  *                    WGALLOWEDIP_A_IPADDR: struct in_addr or struct in6_addr
  *                    WGALLOWEDIP_A_CIDR_MASK: NLA_U8
+ *                    WGALLOWEDIP_A_FLAGS: NLA_U32, WGALLOWEDIP_F_REMOVE_ME if
+ *                                         the specified IP should be removed;
+ *                                         otherwise, this IP will be added if
+ *                                         it is not already present.
  *                0: NLA_NESTED
  *                    ...
  *                0: NLA_NESTED
@@ -184,11 +188,16 @@
 };
 #define WGPEER_A_MAX (__WGPEER_A_LAST - 1)
 
+enum wgallowedip_flag {
+       WGALLOWEDIP_F_REMOVE_ME = 1U << 0,
+       __WGALLOWEDIP_F_ALL = WGALLOWEDIP_F_REMOVE_ME
+};
 enum wgallowedip_attribute {
        WGALLOWEDIP_A_UNSPEC,
        WGALLOWEDIP_A_FAMILY,
        WGALLOWEDIP_A_IPADDR,
        WGALLOWEDIP_A_CIDR_MASK,
+       WGALLOWEDIP_A_FLAGS,
        __WGALLOWEDIP_A_LAST
 };
 #define WGALLOWEDIP_A_MAX (__WGALLOWEDIP_A_LAST - 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/version.h 
new/wireguard-tools-1.0.20250521/src/version.h
--- old/wireguard-tools-1.0.20210914/src/version.h      2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/version.h      2025-05-21 
01:05:38.000000000 +0200
@@ -1,3 +1,3 @@
 #ifndef WIREGUARD_TOOLS_VERSION
-#define WIREGUARD_TOOLS_VERSION "1.0.20210914"
+#define WIREGUARD_TOOLS_VERSION "1.0.20250521"
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/wg-quick/android.c 
new/wireguard-tools-1.0.20250521/src/wg-quick/android.c
--- old/wireguard-tools-1.0.20210914/src/wg-quick/android.c     2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/wg-quick/android.c     2025-05-21 
01:05:38.000000000 +0200
@@ -855,7 +855,7 @@
        if (!len)
                return;
 
-       xregcomp(&regex_ipnothost, "^[a-zA-Z0-9_=+.-]{1,15}$", REG_EXTENDED | 
REG_NOSUB);
+       xregcomp(&regex_ipnothost, "(^[0-9.]+$)|(^.*:.*$)", REG_EXTENDED | 
REG_NOSUB);
        for (char *dns = strtok(mutable, ", \t\n"); dns; dns = strtok(NULL, ", 
\t\n")) {
                if (strchr(dns, '\'') || strchr(dns, '\\'))
                        continue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireguard-tools-1.0.20210914/src/wg-quick/darwin.bash 
new/wireguard-tools-1.0.20250521/src/wg-quick/darwin.bash
--- old/wireguard-tools-1.0.20210914/src/wg-quick/darwin.bash   2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/wg-quick/darwin.bash   2025-05-21 
01:05:38.000000000 +0200
@@ -452,8 +452,8 @@
        local i
        get_real_interface && die "\`$INTERFACE' already exists as 
\`$REAL_INTERFACE'"
        trap 'del_if; del_routes; exit' INT TERM EXIT
-       execute_hooks "${PRE_UP[@]}"
        add_if
+       execute_hooks "${PRE_UP[@]}"
        set_config
        for i in "${ADDRESSES[@]}"; do
                add_addr "$i"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireguard-tools-1.0.20210914/src/wg-quick/freebsd.bash 
new/wireguard-tools-1.0.20250521/src/wg-quick/freebsd.bash
--- old/wireguard-tools-1.0.20210914/src/wg-quick/freebsd.bash  2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/wg-quick/freebsd.bash  2025-05-21 
01:05:38.000000000 +0200
@@ -420,8 +420,8 @@
        local i
        [[ -z $(ifconfig "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' 
already exists"
        trap 'del_if; del_routes; clean_temp; exit' INT TERM EXIT
-       execute_hooks "${PRE_UP[@]}"
        add_if
+       execute_hooks "${PRE_UP[@]}"
        set_config
        for i in "${ADDRESSES[@]}"; do
                add_addr "$i"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/wg-quick/linux.bash 
new/wireguard-tools-1.0.20250521/src/wg-quick/linux.bash
--- old/wireguard-tools-1.0.20210914/src/wg-quick/linux.bash    2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/wg-quick/linux.bash    2025-05-21 
01:05:38.000000000 +0200
@@ -87,7 +87,7 @@
 
 add_if() {
        local ret
-       if ! cmd ip link add "$INTERFACE" type wireguard; then
+       if ! cmd ip link add dev "$INTERFACE" type wireguard; then
                ret=$?
                [[ -e /sys/module/wireguard ]] || ! command -v 
"${WG_QUICK_USERSPACE_IMPLEMENTATION:-wireguard-go}" >/dev/null && exit $ret
                echo "[!] Missing WireGuard kernel module. Falling back to slow 
userspace implementation." >&2
@@ -220,9 +220,9 @@
        fi
        local proto=-4 iptables=iptables pf=ip
        [[ $1 == *:* ]] && proto=-6 iptables=ip6tables pf=ip6
-       cmd ip $proto route add "$1" dev "$INTERFACE" table $table
        cmd ip $proto rule add not fwmark $table table $table
        cmd ip $proto rule add table main suppress_prefixlength 0
+       cmd ip $proto route add "$1" dev "$INTERFACE" table $table
 
        local marker="-m comment --comment \"wg-quick(8) rule for $INTERFACE\"" 
restore=$'*raw\n' nftable="wg-quick-$INTERFACE" nftcmd 
        printf -v nftcmd '%sadd table %s %s\n' "$nftcmd" "$pf" "$nftable"
@@ -327,8 +327,8 @@
        local i
        [[ -z $(ip link show dev "$INTERFACE" 2>/dev/null) ]] || die 
"\`$INTERFACE' already exists"
        trap 'del_if; exit' INT TERM EXIT
-       execute_hooks "${PRE_UP[@]}"
        add_if
+       execute_hooks "${PRE_UP[@]}"
        set_config
        for i in "${ADDRESSES[@]}"; do
                add_addr "$i"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireguard-tools-1.0.20210914/src/wg-quick/openbsd.bash 
new/wireguard-tools-1.0.20250521/src/wg-quick/openbsd.bash
--- old/wireguard-tools-1.0.20210914/src/wg-quick/openbsd.bash  2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/wg-quick/openbsd.bash  2025-05-21 
01:05:38.000000000 +0200
@@ -417,8 +417,8 @@
        local i
        get_real_interface && die "\`$INTERFACE' already exists as 
\`$REAL_INTERFACE'"
        trap 'del_if; del_routes; exit' INT TERM EXIT
-       execute_hooks "${PRE_UP[@]}"
        add_if
+       execute_hooks "${PRE_UP[@]}"
        set_config
        for i in "${ADDRESSES[@]}"; do
                add_addr "$i"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/wg.c 
new/wireguard-tools-1.0.20250521/src/wg.c
--- old/wireguard-tools-1.0.20210914/src/wg.c   2021-09-14 00:43:31.000000000 
+0200
+++ new/wireguard-tools-1.0.20250521/src/wg.c   2025-05-21 01:05:38.000000000 
+0200
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
  * Copyright (C) 2015-2020 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights 
Reserved.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20210914/src/wincompat/init.c 
new/wireguard-tools-1.0.20250521/src/wincompat/init.c
--- old/wireguard-tools-1.0.20210914/src/wincompat/init.c       2021-09-14 
00:43:31.000000000 +0200
+++ new/wireguard-tools-1.0.20250521/src/wincompat/init.c       2025-05-21 
01:05:38.000000000 +0200
@@ -10,16 +10,22 @@
 #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x4
 #endif
 
+extern void NTAPI RtlGetNtVersionNumbers(DWORD *major, DWORD *minor, DWORD 
*build);
+bool is_win7 = false;
+
 __attribute__((constructor)) static void init(void)
 {
        char *colormode;
-       DWORD console_mode;
+       DWORD console_mode, major, minor;
        HANDLE stdout_handle;
        WSADATA wsaData;
 
        if (!SetDllDirectoryA("") || 
!SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32))
                abort();
 
+       RtlGetNtVersionNumbers(&major, &minor, NULL);
+       is_win7 = (major == 6 && minor <= 1) || major < 6;
+
        WSAStartup(MAKEWORD(2, 2), &wsaData);
 
        stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); // We don't close this.

Reply via email to