Hello community,

here is the log from the commit of package wireguard-tools for openSUSE:Factory 
checked in at 2020-01-22 22:45:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wireguard-tools (Old)
 and      /work/SRC/openSUSE:Factory/.wireguard-tools.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wireguard-tools"

Wed Jan 22 22:45:44 2020 rev:2 rq:766168 version:1.0.20200121

Changes:
--------
--- /work/SRC/openSUSE:Factory/wireguard-tools/wireguard-tools.changes  
2020-01-21 21:01:07.640870266 +0100
+++ 
/work/SRC/openSUSE:Factory/.wireguard-tools.new.26092/wireguard-tools.changes   
    2020-01-22 22:45:53.652564248 +0100
@@ -1,0 +2,11 @@
+Tue Jan 21 22:04:27 UTC 2020 - Martin Hauke <[email protected]>
+
+- Update to version 1.0.20200121
+  * Makefile: add standard 'all' target
+  * ipc: simplify inflatable buffer and add fuzzer
+  * fuzz: add generic command argument fuzzer
+  * fuzz: add set and setconf fuzzers
+  * netlink: make sure to clear return value when trying again
+  * Makefile: sort inputs to linker so that build is reproducible
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ wireguard-tools.spec ++++++
--- /var/tmp/diff_new_pack.eq4nqJ/_old  2020-01-22 22:45:55.704565281 +0100
+++ /var/tmp/diff_new_pack.eq4nqJ/_new  2020-01-22 22:45:55.752565306 +0100
@@ -1,6 +1,7 @@
 #
 # spec file for package wireguard-tools
 #
+# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
 # Copyright (c) 2020, Martin Hauke <[email protected]>
 #
 # All modifications and additions to the file contributed by third parties
@@ -15,10 +16,11 @@
 # Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
+
 Name:           wireguard-tools
-Version:        1.0.20200102
+Version:        1.0.20200121
 Release:        0
-Summary:        Wireguard userspace tools
+Summary:        WireGuard userspace tools
 License:        GPL-2.0-only
 Group:          Productivity/Networking/Security
 URL:            https://www.wireguard.com/


++++++ wireguard-tools-1.0.20200102.tar.xz -> 
wireguard-tools-1.0.20200121.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/Makefile 
new/wireguard-tools-1.0.20200121/src/Makefile
--- old/wireguard-tools-1.0.20200102/src/Makefile       2020-01-02 
19:53:11.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/Makefile       2020-01-21 
15:51:31.000000000 +0100
@@ -46,9 +46,9 @@
 ifeq ($(DEBUG),yes)
 CFLAGS += -g
 endif
-GIT_VERSION := $(shell GIT_CEILING_DIRECTORIES="$(PWD)/../.." git describe 
--dirty 2>/dev/null)
-ifneq ($(GIT_VERSION),)
-CFLAGS += -D'WIREGUARD_TOOLS_VERSION="$(GIT_VERSION:v%=%)"'
+WIREGUARD_TOOLS_VERSION = $(patsubst v%,%,$(shell 
GIT_CEILING_DIRECTORIES="$(PWD)/../.." git describe --dirty 2>/dev/null))
+ifneq ($(WIREGUARD_TOOLS_VERSION),)
+CFLAGS += -D'WIREGUARD_TOOLS_VERSION="$(WIREGUARD_TOOLS_VERSION)"'
 endif
 ifeq ($(PLATFORM),linux)
 LIBMNL_CFLAGS := $(shell $(PKG_CONFIG) --cflags libmnl 2>/dev/null)
@@ -68,18 +68,18 @@
 
 ifneq ($(V),1)
 BUILT_IN_LINK.o := $(LINK.o)
-LINK.o = @echo "  LD      $$(pwd)/$@";
+LINK.o = @echo "  LD      $@";
 LINK.o += $(BUILT_IN_LINK.o)
 BUILT_IN_COMPILE.c := $(COMPILE.c)
-COMPILE.c = @echo "  CC      $$(pwd)/$@";
+COMPILE.c = @echo "  CC      $@";
 COMPILE.c += $(BUILT_IN_COMPILE.c)
 endif
 
-wg: $(patsubst %.c,%.o,$(wildcard *.c))
+wg: $(sort $(patsubst %.c,%.o,$(wildcard *.c)))
 
 ifneq ($(V),1)
 clean:
-       @echo "  CLEAN   $$(pwd)/{wg,*.o,*.d}"
+       @echo "  CLEAN   {wg,*.o,*.d}"
        @$(RM) wg *.o *.d
 else
 clean:
@@ -103,6 +103,8 @@
 check: clean
        scan-build --html-title=wireguard-tools -maxloop 100 --view 
--keep-going $(MAKE) wg
 
+all: wg
+.DEFAULT_GOAL: all
 .PHONY: clean install check
 
 -include *.d
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/fuzz/.gitignore 
new/wireguard-tools-1.0.20200121/src/fuzz/.gitignore
--- old/wireguard-tools-1.0.20200102/src/fuzz/.gitignore        2020-01-02 
19:53:11.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/fuzz/.gitignore        2020-01-21 
15:51:31.000000000 +0100
@@ -1,2 +1,6 @@
 config
 uapi
+stringlist
+cmd
+set
+setconf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/fuzz/Makefile 
new/wireguard-tools-1.0.20200121/src/fuzz/Makefile
--- old/wireguard-tools-1.0.20200102/src/fuzz/Makefile  2020-01-02 
19:53:11.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/fuzz/Makefile  2020-01-21 
15:51:31.000000000 +0100
@@ -2,10 +2,12 @@
 #
 # Copyright (C) 2018-2020 Jason A. Donenfeld <[email protected]>. All Rights 
Reserved.
 
-all: config uapi
+FUZZERS := config uapi stringlist cmd set setconf
+
+all: $(FUZZERS)
 
 CFLAGS ?= -O3 -march=native -g
-CFLAGS += -fsanitize=fuzzer -std=gnu11 -idirafter ../uapi
+CFLAGS += -fsanitize=fuzzer -fsanitize=address -std=gnu11 -idirafter ../uapi 
-D_GNU_SOURCE
 CC := clang
 
 config: config.c ../config.c ../encoding.c
@@ -14,7 +16,19 @@
 uapi: uapi.c ../ipc.c ../curve25519.c ../encoding.c
        $(CC) $(CFLAGS) -o $@ $<
 
+stringlist: stringlist.c ../ipc.c ../curve25519.c ../encoding.c
+       $(CC) $(CFLAGS) -o $@ $<
+
+cmd: cmd.c $(wildcard ../*.c)
+       $(CC) $(CFLAGS) -D'RUNSTATEDIR="/var/empty"' -D'main(a,b)=wg_main(a,b)' 
-o $@ $^ -lmnl
+
+set: set.c ../set.c ../ipc.c ../encoding.c ../mnlg.c ../curve25519.c 
../config.c
+       $(CC) $(CFLAGS) -o $@ $< -lmnl
+
+setconf: setconf.c ../setconf.c ../ipc.c ../encoding.c ../mnlg.c 
../curve25519.c ../config.c
+       $(CC) $(CFLAGS) -o $@ $< -lmnl
+
 clean:
-       rm -f config uapi
+       $(RM) $(FUZZERS)
 
 .PHONY: all clean
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/fuzz/cmd.c 
new/wireguard-tools-1.0.20200121/src/fuzz/cmd.c
--- old/wireguard-tools-1.0.20200102/src/fuzz/cmd.c     1970-01-01 
01:00:00.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/fuzz/cmd.c     2020-01-21 
15:51:31.000000000 +0100
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018-2020 Jason A. Donenfeld <[email protected]>. All Rights 
Reserved.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+const char *__asan_default_options()
+{
+       return "verbosity=1";
+}
+
+int wg_main(int argc, char *argv[]);
+
+static FILE *devnull;
+
+int LLVMFuzzerTestOneInput(const char *data, size_t data_len)
+{
+       char *argv[8192] = { 0 }, *args;
+       size_t argc = 0;
+       FILE *fake_stdin = NULL;
+
+       if (!devnull) {
+               assert((devnull = fopen("/dev/null", "r+")));
+               stdin = stdout = stderr = devnull;
+       }
+
+       assert((args = malloc(data_len)));
+       memcpy(args, data, data_len);
+       if (data_len)
+               args[data_len - 1] = '\0';
+
+       for (const char *arg = args; argc < 8192 && arg - args < data_len; arg 
+= strlen(arg) + 1) {
+               if (arg[0])
+                       assert((argv[argc++] = strdup(arg)));
+       }
+       if (!argc)
+               assert((argv[argc++] = strdup("no argv[0]!")));
+       if (argc > 2 && (!strcmp(argv[1], "show") || !strcmp(argv[1], 
"showconf") || !strcmp(argv[1], "set") || !strcmp(argv[1], "setconf") || 
!strcmp(argv[1], "addconf") || !strcmp(argv[1], "syncconf"))) {
+               free(argv[2]);
+               assert((argv[2] = strdup("wg0")));
+       }
+       if (argc >= 2 && !strcmp(argv[1], "pubkey")) {
+               char *arg;
+               size_t len;
+
+               for (size_t i = 2; i < argc; ++i)
+                       free(argv[i]);
+               argc = 2;
+               arg = args;
+               for (; !arg[0]; ++arg);
+               arg += strlen(arg) + 1;
+               for (; !arg[0]; ++arg);
+               arg += strlen(arg) + 1;
+               len = data_len - (arg - args);
+               if (len <= 1)
+                       goto done;
+               assert((fake_stdin = fmemopen(arg, len - 1, "r")));
+               stdin = fake_stdin;
+       }
+       wg_main(argc, argv);
+done:
+       for (size_t i = 0; i < argc; ++i)
+               free(argv[i]);
+       free(args);
+       if (fake_stdin)
+               fclose(fake_stdin);
+       return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/fuzz/config.c 
new/wireguard-tools-1.0.20200121/src/fuzz/config.c
--- old/wireguard-tools-1.0.20200102/src/fuzz/config.c  2020-01-02 
19:53:11.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/fuzz/config.c  2020-01-21 
15:51:31.000000000 +0100
@@ -18,7 +18,7 @@
 
 const char *__asan_default_options()
 {
-        return "verbosity=1";
+       return "verbosity=1";
 }
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t len)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/fuzz/set.c 
new/wireguard-tools-1.0.20200121/src/fuzz/set.c
--- old/wireguard-tools-1.0.20200102/src/fuzz/set.c     1970-01-01 
01:00:00.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/fuzz/set.c     2020-01-21 
15:51:31.000000000 +0100
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018-2020 Jason A. Donenfeld <[email protected]>. All Rights 
Reserved.
+ */
+
+#include <stdio.h>
+#undef stderr
+#define stderr stdin
+#define RUNSTATEDIR "/var/empty"
+#include "../curve25519.c"
+#define parse_allowedips parse_allowedips_ipc
+#include "../ipc.c"
+#undef parse_allowedips
+#include "../encoding.c"
+static FILE *hacked_fopen(const char *pathname, const char *mode);
+#define fopen hacked_fopen
+#include "../config.c"
+#include "../mnlg.c"
+#include "../set.c"
+#undef stderr
+
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+const char *__asan_default_options()
+{
+       return "verbosity=1";
+}
+
+const char *PROG_NAME = "wg";
+
+static FILE *hacked_fopen(const char *pathname, const char *mode)
+{
+       return fmemopen((char *)pathname, strlen(pathname), "r");
+}
+
+int LLVMFuzzerTestOneInput(const char *data, size_t data_len)
+{
+       char *argv[8192] = { "set", "wg0" }, *args;
+       size_t argc = 2;
+
+       if (!data_len)
+               return 0;
+
+       assert((args = malloc(data_len)));
+       memcpy(args, data, data_len);
+       args[data_len - 1] = '\0';
+
+       for (char *arg = strtok(args, " \t\n\r"); arg && argc < 8192; arg = 
strtok(NULL, " \t\n\r")) {
+               if (arg[0])
+                       argv[argc++] = arg;
+       }
+       set_main(argc, argv);
+       free(args);
+       return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/fuzz/setconf.c 
new/wireguard-tools-1.0.20200121/src/fuzz/setconf.c
--- old/wireguard-tools-1.0.20200102/src/fuzz/setconf.c 1970-01-01 
01:00:00.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/fuzz/setconf.c 2020-01-21 
15:51:31.000000000 +0100
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018-2020 Jason A. Donenfeld <[email protected]>. All Rights 
Reserved.
+ */
+
+#include <stdio.h>
+#undef stderr
+#define stderr stdin
+#define RUNSTATEDIR "/var/empty"
+#include "../curve25519.c"
+#define parse_allowedips parse_allowedips_ipc
+#include "../ipc.c"
+#undef parse_allowedips
+#include "../encoding.c"
+#include "../config.c"
+#include "../mnlg.c"
+static FILE *hacked_fopen(const char *pathname, const char *mode);
+#define fopen hacked_fopen
+#include "../setconf.c"
+#undef fopen
+#undef stderr
+
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+const char *__asan_default_options()
+{
+       return "verbosity=1";
+}
+
+const char *PROG_NAME = "wg";
+
+struct hacked_pointers {
+       const char *data;
+       size_t data_len;
+};
+
+static FILE *hacked_fopen(const char *pathname, const char *mode)
+{
+       struct hacked_pointers *h = (struct hacked_pointers *)strtoul(pathname, 
NULL, 10);
+       return fmemopen((char *)h->data, h->data_len, "r");
+}
+
+int LLVMFuzzerTestOneInput(const char *data, size_t data_len)
+{
+       char strptr[32];
+       char *argv[3] = { "setconf", "wg0", strptr };
+       struct hacked_pointers h = { data, data_len };
+
+       snprintf(strptr, sizeof(strptr), "%lu", (unsigned long)&h);
+       setconf_main(3, argv);
+       return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/fuzz/stringlist.c 
new/wireguard-tools-1.0.20200121/src/fuzz/stringlist.c
--- old/wireguard-tools-1.0.20200102/src/fuzz/stringlist.c      1970-01-01 
01:00:00.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/fuzz/stringlist.c      2020-01-21 
15:51:31.000000000 +0100
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018-2020 Jason A. Donenfeld <[email protected]>. All Rights 
Reserved.
+ */
+
+#define RUNSTATEDIR "/var/empty"
+#include "../curve25519.c"
+#undef __linux__
+#include "../ipc.c"
+#include "../encoding.c"
+
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+const char *__asan_default_options()
+{
+       return "verbosity=1";
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t data_len)
+{
+       struct string_list list = { 0 };
+       char *interfaces;
+
+       if (!data_len)
+               return 0;
+
+       interfaces = malloc(data_len);
+       assert(interfaces);
+       memcpy(interfaces, data, data_len);
+       interfaces[data_len - 1] = '\0';
+
+       for (char *interface = interfaces; interface - interfaces < data_len; 
interface += strlen(interface) + 1)
+               assert(string_list_add(&list, interface) == 0);
+
+       for (char *interface = interfaces, *interface2 = list.buffer;;) {
+               size_t len;
+
+               if (interface - interfaces >= data_len) {
+                       assert(!interface2 || !strlen(interface2));
+                       break;
+               }
+               len = strlen(interface);
+               if (!len) {
+                       ++interface;
+                       continue;
+               }
+               assert(strlen(interface2) == len);
+               assert(!memcmp(interface, interface2, len + 1));
+               interface += len + 1;
+               interface2 += len + 1;
+       }
+       free(list.buffer);
+       free(interfaces);
+       return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/fuzz/uapi.c 
new/wireguard-tools-1.0.20200121/src/fuzz/uapi.c
--- old/wireguard-tools-1.0.20200102/src/fuzz/uapi.c    2020-01-02 
19:53:11.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/fuzz/uapi.c    2020-01-21 
15:51:31.000000000 +0100
@@ -8,9 +8,9 @@
 static FILE *hacked_userspace_interface_file(const char *iface);
 #define stat(a, b) ({ return hacked_userspace_interface_file(iface); 0; })
 #define RUNSTATEDIR "/var/empty"
+#include "../curve25519.c"
 #undef __linux__
 #include "../ipc.c"
-#include "../curve25519.c"
 #include "../encoding.c"
 
 #include <stdint.h>
@@ -20,7 +20,7 @@
 
 const char *__asan_default_options()
 {
-        return "verbosity=1";
+       return "verbosity=1";
 }
 
 union hackiface {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/ipc.c 
new/wireguard-tools-1.0.20200121/src/ipc.c
--- old/wireguard-tools-1.0.20200102/src/ipc.c  2020-01-02 19:53:11.000000000 
+0100
+++ new/wireguard-tools-1.0.20200121/src/ipc.c  2020-01-21 15:51:31.000000000 
+0100
@@ -48,50 +48,34 @@
 #define SOCKET_BUFFER_SIZE 8192
 #endif
 
-struct inflatable_buffer {
+struct string_list {
        char *buffer;
-       char *next;
-       bool good;
        size_t len;
-       size_t pos;
+       size_t cap;
 };
 
-#define max(a, b) ((a) > (b) ? (a) : (b))
-static int add_next_to_inflatable_buffer(struct inflatable_buffer *buffer)
+static int string_list_add(struct string_list *list, const char *str)
 {
-       size_t len, expand_to;
-       char *new_buffer;
+       size_t len = strlen(str) + 1;
 
-       if (!buffer->good || !buffer->next) {
-               free(buffer->next);
-               buffer->good = false;
+       if (len == 1)
                return 0;
-       }
-
-       len = strlen(buffer->next) + 1;
-
-       if (len == 1) {
-               free(buffer->next);
-               buffer->good = false;
-               return 0;
-       }
 
-       if (buffer->len - buffer->pos <= len) {
-               expand_to = max(buffer->len * 2, buffer->len + len + 1);
-               new_buffer = realloc(buffer->buffer, expand_to);
-               if (!new_buffer) {
-                       free(buffer->next);
-                       buffer->good = false;
+       if (len >= list->cap - list->len) {
+               char *new_buffer;
+               size_t new_cap = list->cap * 2;
+
+               if (new_cap <  list->len +len + 1)
+                       new_cap = list->len + len + 1;
+               new_buffer = realloc(list->buffer, new_cap);
+               if (!new_buffer)
                        return -errno;
-               }
-               memset(&new_buffer[buffer->len], 0, expand_to - buffer->len);
-               buffer->buffer = new_buffer;
-               buffer->len = expand_to;
-       }
-       memcpy(&buffer->buffer[buffer->pos], buffer->next, len);
-       free(buffer->next);
-       buffer->good = false;
-       buffer->pos += len;
+               list->buffer = new_buffer;
+               list->cap = new_cap;
+       }
+       memcpy(list->buffer + list->len, str, len);
+       list->len += len;
+       list->buffer[list->len] = '\0';
        return 0;
 }
 
@@ -167,7 +151,7 @@
        return true;
 }
 
-static int userspace_get_wireguard_interfaces(struct inflatable_buffer *buffer)
+static int userspace_get_wireguard_interfaces(struct string_list *list)
 {
        DIR *dir;
        struct dirent *ent;
@@ -188,9 +172,7 @@
                *end = '\0';
                if (!userspace_has_wireguard_interface(ent->d_name))
                        continue;
-               buffer->next = strdup(ent->d_name);
-               buffer->good = true;
-               ret = add_next_to_inflatable_buffer(buffer);
+               ret = string_list_add(list, ent->d_name);
                if (ret < 0)
                        goto out;
        }
@@ -451,37 +433,42 @@
 
 #ifdef __linux__
 
+struct interface {
+       const char *name;
+       bool is_wireguard;
+};
+
 static int parse_linkinfo(const struct nlattr *attr, void *data)
 {
-       struct inflatable_buffer *buffer = data;
+       struct interface *interface = data;
 
-       if (mnl_attr_get_type(attr) == IFLA_INFO_KIND && !strcmp("wireguard", 
mnl_attr_get_str(attr)))
-               buffer->good = true;
+       if (mnl_attr_get_type(attr) == IFLA_INFO_KIND && !strcmp(WG_GENL_NAME, 
mnl_attr_get_str(attr)))
+               interface->is_wireguard = true;
        return MNL_CB_OK;
 }
 
 static int parse_infomsg(const struct nlattr *attr, void *data)
 {
-       struct inflatable_buffer *buffer = data;
+       struct interface *interface = data;
 
        if (mnl_attr_get_type(attr) == IFLA_LINKINFO)
                return mnl_attr_parse_nested(attr, parse_linkinfo, data);
        else if (mnl_attr_get_type(attr) == IFLA_IFNAME)
-               buffer->next = strdup(mnl_attr_get_str(attr));
+               interface->name = mnl_attr_get_str(attr);
        return MNL_CB_OK;
 }
 
 static int read_devices_cb(const struct nlmsghdr *nlh, void *data)
 {
-       struct inflatable_buffer *buffer = data;
+       struct string_list *list = data;
+       struct interface interface = { 0 };
        int ret;
 
-       buffer->good = false;
-       buffer->next = NULL;
-       ret = mnl_attr_parse(nlh, sizeof(struct ifinfomsg), parse_infomsg, 
data);
+       ret = mnl_attr_parse(nlh, sizeof(struct ifinfomsg), parse_infomsg, 
&interface);
        if (ret != MNL_CB_OK)
                return ret;
-       ret = add_next_to_inflatable_buffer(buffer);
+       if (interface.name && interface.is_wireguard)
+               ret = string_list_add(list, interface.name);
        if (ret < 0)
                return ret;
        if (nlh->nlmsg_type != NLMSG_DONE)
@@ -489,7 +476,7 @@
        return MNL_CB_OK;
 }
 
-static int kernel_get_wireguard_interfaces(struct inflatable_buffer *buffer)
+static int kernel_get_wireguard_interfaces(struct string_list *list)
 {
        struct mnl_socket *nl = NULL;
        char *rtnl_buffer = NULL;
@@ -536,7 +523,7 @@
                ret = -errno;
                goto cleanup;
        }
-       if ((len = mnl_cb_run(rtnl_buffer, len, seq, portid, read_devices_cb, 
buffer)) < 0) {
+       if ((len = mnl_cb_run(rtnl_buffer, len, seq, portid, read_devices_cb, 
list)) < 0) {
                /* Netlink returns NLM_F_DUMP_INTR if the set of all tunnels 
changed
                 * during the dump. That's unfortunate, but is pretty common on 
busy
                 * systems that are adding and removing tunnels all the time. 
Rather
@@ -894,11 +881,12 @@
 
 static int kernel_get_device(struct wgdevice **device, const char *iface)
 {
-       int ret = 0;
+       int ret;
        struct nlmsghdr *nlh;
        struct mnlg_socket *nlg;
 
 try_again:
+       ret = 0;
        *device = calloc(1, sizeof(**device));
        if (!*device)
                return -errno;
@@ -940,30 +928,25 @@
 /* first\0second\0third\0forth\0last\0\0 */
 char *ipc_list_devices(void)
 {
-       struct inflatable_buffer buffer = { .len = SOCKET_BUFFER_SIZE };
+       struct string_list list = { 0 };
        int ret;
 
-       ret = -ENOMEM;
-       buffer.buffer = calloc(1, buffer.len);
-       if (!buffer.buffer)
-               goto cleanup;
-
 #ifdef __linux__
-       ret = kernel_get_wireguard_interfaces(&buffer);
+       ret = kernel_get_wireguard_interfaces(&list);
        if (ret < 0)
                goto cleanup;
 #endif
-       ret = userspace_get_wireguard_interfaces(&buffer);
+       ret = userspace_get_wireguard_interfaces(&list);
        if (ret < 0)
                goto cleanup;
 
 cleanup:
        errno = -ret;
        if (errno) {
-               free(buffer.buffer);
+               free(list.buffer);
                return NULL;
        }
-       return buffer.buffer;
+       return list.buffer ?: strdup("\0");
 }
 
 int ipc_get_device(struct wgdevice **dev, const char *iface)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireguard-tools-1.0.20200102/src/version.h 
new/wireguard-tools-1.0.20200121/src/version.h
--- old/wireguard-tools-1.0.20200102/src/version.h      2020-01-02 
19:53:11.000000000 +0100
+++ new/wireguard-tools-1.0.20200121/src/version.h      2020-01-21 
15:51:31.000000000 +0100
@@ -1,3 +1,3 @@
 #ifndef WIREGUARD_TOOLS_VERSION
-#define WIREGUARD_TOOLS_VERSION "1.0.20200102"
+#define WIREGUARD_TOOLS_VERSION "1.0.20200121"
 #endif


Reply via email to