diff --git a/main/fping/APKBUILD b/main/fping/APKBUILD
index db8a260fed6c156849b53b406d0e68cf8aec91cd..e1cbc7725888b13bdee11ed38020e5219d56b67e 100644
--- a/main/fping/APKBUILD
+++ b/main/fping/APKBUILD
@@ -1,14 +1,16 @@
 # Maintainer: Natanael Copa <ncopa@alpinelinux.org>
 pkgname=fping
 pkgver=5.1
-pkgrel=1
+pkgrel=2
 pkgdesc="A utility to ping multiple hosts at once"
 url="https://fping.org/"
 arch="all"
 license="MIT"
 makedepends="libcap"
 subpackages="$pkgname-doc"
-source="https://fping.org/dist/fping-$pkgver.tar.gz"
+source="https://fping.org/dist/fping-$pkgver.tar.gz
+	unprivileged-ping.patch
+	"
 options="!check" # no testsuite
 
 build() {
@@ -28,4 +30,5 @@ package() {
 
 sha512sums="
 1a208da8dcd99093d0512af5d85ba5e7b5743ec97993d24c1fe612bb58d93090ac1ba0952f648aa075f16d390a77c4be65e394ae56dbede2a6914e0e8c68e2bd  fping-5.1.tar.gz
+57fb8976a382ef21200430a238985cec04ecb72458e67d02ae4eac3af4f14108ad90460d562ee9f46a579d6226335b9391542c641acd2c6e1736fa138176e52f  unprivileged-ping.patch
 "
diff --git a/main/fping/unprivileged-ping.patch b/main/fping/unprivileged-ping.patch
new file mode 100644
index 0000000000000000000000000000000000000000..cc414df9e5140b2f899a5c3df3658ff6663353ed
--- /dev/null
+++ b/main/fping/unprivileged-ping.patch
@@ -0,0 +1,28 @@
+Patch-Source: https://github.com/schweikert/fping/commit/e975a4339b24716fb57bed234b0a1176f2bf3451
+--
+Author: David Schweikert <david@schweikert.ch>
+Committer: Nash Kaminski <Nash.Kaminski@ny.email.gs.com>
+Summary: This patch backports the upstream bugfix from
+         https://github.com/schweikert/fping/issues/248
+         for a regression introduced in version 5.1 which
+         prevents fping from functioning when run in an
+         unprivileged container.
+----
+diff --git a/src/fping.c b/src/fping.c
+index e26b216c..0bd2b70c 100644
+--- a/src/fping.c
++++ b/src/fping.c
+@@ -1104,11 +1104,11 @@ int main(int argc, char** argv)
+         exit(num_noaddress ? 2 : 1);
+     }
+
+-    if (src_addr_set && socket4 >= 0) {
++    if (socket4 >= 0 && (src_addr_set || socktype4 == SOCK_DGRAM)) {
+         socket_set_src_addr_ipv4(socket4, &src_addr, (socktype4 == SOCK_DGRAM) ? &ident4 : NULL);
+     }
+ #ifdef IPV6
+-    if (src_addr6_set && socket6 >= 0) {
++    if (socket6 >= 0 && (src_addr6_set || socktype4 == SOCK_DGRAM)) {
+         socket_set_src_addr_ipv6(socket6, &src_addr6, (socktype6 == SOCK_DGRAM) ? &ident6 : NULL);
+     }
+ #endif