aboutgitcodebugslistschat
path: root/arp.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2022-11-14 23:00:27 +0100
committerStefano Brivio <sbrivio@redhat.com>2022-11-16 15:11:13 +0100
commitb27d6d121c8fad94658bbcf433e99f7fff542550 (patch)
treecd63cf53f155a67f02d60ed9c96c1a8f599aba2f /arp.c
parent5f7446501052233e472cb1e6b3f403c7923ce90a (diff)
downloadpasst-b27d6d121c8fad94658bbcf433e99f7fff542550.tar
passt-b27d6d121c8fad94658bbcf433e99f7fff542550.tar.gz
passt-b27d6d121c8fad94658bbcf433e99f7fff542550.tar.bz2
passt-b27d6d121c8fad94658bbcf433e99f7fff542550.tar.lz
passt-b27d6d121c8fad94658bbcf433e99f7fff542550.tar.xz
passt-b27d6d121c8fad94658bbcf433e99f7fff542550.tar.zst
passt-b27d6d121c8fad94658bbcf433e99f7fff542550.zip
arp, tap, util: Don't use perror() after seccomp filter is installed
If stderr is closed, after we fork to background, glibc's implementation of perror() will try to re-open it by calling dup(), upon which the seccomp filter causes the process to terminate, because dup() is not included in the list of allowed syscalls. Replace perror() calls that might happen after isolation_postfork(). We could probably replace all of them, but early ones need a bit more attention as we have to check whether log.c functions work in early stages. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'arp.c')
-rw-r--r--arp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arp.c b/arp.c
index 141d43f..930b9ea 100644
--- a/arp.c
+++ b/arp.c
@@ -24,6 +24,7 @@
#include <string.h>
#include "util.h"
+#include "log.h"
#include "arp.h"
#include "dhcp.h"
#include "passt.h"
@@ -43,6 +44,7 @@ int arp(const struct ctx *c, const struct pool *p)
struct arphdr *ah;
struct arpmsg *am;
size_t len;
+ int ret;
eh = packet_get(p, 0, 0, sizeof(*eh), NULL);
ah = packet_get(p, 0, sizeof(*eh), sizeof(*ah), NULL);
@@ -81,8 +83,8 @@ int arp(const struct ctx *c, const struct pool *p)
memcpy(eh->h_dest, eh->h_source, sizeof(eh->h_dest));
memcpy(eh->h_source, c->mac, sizeof(eh->h_source));
- if (tap_send(c, eh, len) < 0)
- perror("ARP: send");
+ if ((ret = tap_send(c, eh, len)) < 0)
+ warn("ARP: send: %s", strerror(ret));
return 1;
}