diff options
Diffstat (limited to 'source/n')
-rwxr-xr-x | source/n/dhcpcd/dhcpcd.SlackBuild | 1 | ||||
-rw-r--r-- | source/n/dhcpcd/patches/257259dd79d103f23342b1f0a3d608571a0ad549.patch | 75 |
2 files changed, 76 insertions, 0 deletions
diff --git a/source/n/dhcpcd/dhcpcd.SlackBuild b/source/n/dhcpcd/dhcpcd.SlackBuild index 82a9b44fb..9bd593993 100755 --- a/source/n/dhcpcd/dhcpcd.SlackBuild +++ b/source/n/dhcpcd/dhcpcd.SlackBuild @@ -85,6 +85,7 @@ find . \ patch -p1 --verbose < $CWD/patches/dhcpcd.conf-Don-t-invoke-wpa_supplicant-by-default.patch || exit 1 patch -p1 --verbose < $CWD/patches/use-hostname_short-in-dhcpcd.conf.patch || exit 1 patch -p1 --verbose < $CWD/patches/dhcpcd.conf-request_ntp_server_by_default.patch || exit 1 +patch -p1 --verbose < $CWD/patches/257259dd79d103f23342b1f0a3d608571a0ad549.patch || exit 1 # At this point, it should be safe to assume that /var will be mounted by the # time dhcpcd is called, as all non-root local filesystems are mounted from diff --git a/source/n/dhcpcd/patches/257259dd79d103f23342b1f0a3d608571a0ad549.patch b/source/n/dhcpcd/patches/257259dd79d103f23342b1f0a3d608571a0ad549.patch new file mode 100644 index 000000000..0ce8fa817 --- /dev/null +++ b/source/n/dhcpcd/patches/257259dd79d103f23342b1f0a3d608571a0ad549.patch @@ -0,0 +1,75 @@ +From 257259dd79d103f23342b1f0a3d608571a0ad549 Mon Sep 17 00:00:00 2001 +From: Roy Marples <roy@marples.name> +Date: Thu, 13 Apr 2023 17:43:11 +0100 +Subject: [PATCH] bpf: Always open /dev/bpf directly + +Ignore _PATH_BPF as that's really a NetBSDism. +If /dev/bpf throws a wobbly then try /dev/bpfN for older kernels. + +This allows cloning BPF on more BSD systems. +--- + src/bpf.c | 36 +++++++++++++++++------------------- + 1 file changed, 17 insertions(+), 19 deletions(-) + +diff --git a/src/bpf.c b/src/bpf.c +index e4b56f3d..b75bfb04 100644 +--- a/src/bpf.c ++++ b/src/bpf.c +@@ -45,7 +45,6 @@ + + #include <errno.h> + #include <fcntl.h> +-#include <paths.h> + #include <stddef.h> + #include <stdlib.h> + #include <string.h> +@@ -155,6 +154,11 @@ bpf_open(const struct interface *ifp, + struct bpf_version pv = { .bv_major = 0, .bv_minor = 0 }; + struct ifreq ifr = { .ifr_flags = 0 }; + int ibuf_len = 0; ++#ifdef O_CLOEXEC ++#define BPF_OPEN_FLAGS O_RDWR | O_NONBLOCK | O_CLOEXEC ++#else ++#define BPF_OPEN_FLAGS O_RDWR | O_NONBLOCK ++#endif + #ifdef BIOCIMMEDIATE + unsigned int flags; + #endif +@@ -167,25 +171,19 @@ bpf_open(const struct interface *ifp, + return NULL; + bpf->bpf_ifp = ifp; + +-#ifdef _PATH_BPF +- bpf->bpf_fd = open(_PATH_BPF, O_RDWR | O_NONBLOCK +-#ifdef O_CLOEXEC +- | O_CLOEXEC +-#endif +- ); +-#else +- char device[32]; +- int n = 0; ++ /* /dev/bpf is a cloner on modern kernels */ ++ bpf->bpf_fd = open("/dev/bpf", BPF_OPEN_FLAGS); + +- do { +- snprintf(device, sizeof(device), "/dev/bpf%d", n++); +- bpf->bpf_fd = open(device, O_RDWR | O_NONBLOCK +-#ifdef O_CLOEXEC +- | O_CLOEXEC +-#endif +- ); +- } while (bpf->bpf_fd == -1 && errno == EBUSY); +-#endif ++ /* Support older kernels where /dev/bpf is not a cloner */ ++ if (bpf->bpf_fd == -1) { ++ char device[32]; ++ int n = 0; ++ ++ do { ++ snprintf(device, sizeof(device), "/dev/bpf%d", n++); ++ bpf->bpf_fd = open(device, BPF_OPEN_FLAGS); ++ } while (bpf->bpf_fd == -1 && errno == EBUSY); ++ } + + if (bpf->bpf_fd == -1) + goto eexit; |