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