aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2017-10-08 16:24:37 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2017-10-08 16:24:37 +0200
commit8774fccff32c8f5ed5527fa4e349ee534d34174c (patch)
tree44fa94e6e7f3260cb82443e2fdce996ca970908f
parentMakefile: clang now builds the kernel, so use scan-build (diff)
downloadwireguard-tools-8774fccff32c8f5ed5527fa4e349ee534d34174c.tar.xz
wireguard-tools-8774fccff32c8f5ed5527fa4e349ee534d34174c.zip
wg: try again if dump is interrupted
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--src/ipc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/ipc.c b/src/ipc.c
index 5625526..a460d28 100644
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -855,11 +855,12 @@ static int kernel_get_device(struct wgdevice **dev, const char *interface)
struct mnlg_socket *nlg;
struct get_device_ctx ctx = { 0 };
+try_again:
*dev = ctx.device = calloc(1, sizeof(struct wgdevice));
if (!*dev)
return -errno;
- nlg= mnlg_socket_open(WG_GENL_NAME, WG_GENL_VERSION);
+ nlg = mnlg_socket_open(WG_GENL_NAME, WG_GENL_VERSION);
if (!nlg) {
free_wgdevice(*dev);
*dev = NULL;
@@ -884,6 +885,8 @@ out:
mnlg_socket_close(nlg);
if (ret) {
free_wgdevice(*dev);
+ if (ret == -EINTR)
+ goto try_again;
*dev = NULL;
}
errno = -ret;