diff --git a/main/cryptsetup/APKBUILD b/main/cryptsetup/APKBUILD
index 0c89afbfa811765b6de9756dc9a84d5811e7baf8..2582299f0d0db54e03b756cf816114fde8b29ed9 100644
--- a/main/cryptsetup/APKBUILD
+++ b/main/cryptsetup/APKBUILD
@@ -1,7 +1,7 @@
 # Maintainer: Natanael Copa <ncopa@alpinelinux.org>
 pkgname=cryptsetup
 pkgver=1.6.6
-pkgrel=2
+pkgrel=3
 pkgdesc="Userspace setup tool for transparent encryption of block devices using the Linux 2.6 cryptoapi"
 url="http://code.google.com/p/cryptsetup/"
 arch="all"
@@ -11,6 +11,7 @@ makedepends="lvm2-dev openssl-dev popt-dev util-linux-dev !libiconv-dev"
 subpackages="$pkgname-dev $pkgname-doc $pkgname-libs"
 source="https://www.kernel.org/pub/linux/utils/cryptsetup/v${pkgver%.*}/cryptsetup-$pkgver.tar.gz
 	flush-stdout.patch
+	strerror_r.patch
 	dmcrypt.confd
 	dmcrypt.initd
 	"
@@ -61,13 +62,16 @@ libs() {
 
 md5sums="24790bd4f4fa24570d7ea9af27ccf079  cryptsetup-1.6.6.tar.gz
 7d5c8727ea417cabe86df67a9de1de16  flush-stdout.patch
+b52c14f089d3256b481d202d0d0844bf  strerror_r.patch
 1369aeaed84e41c8d585695596a24bd6  dmcrypt.confd
 bef4b9289822c47a293f2a0be3526e9c  dmcrypt.initd"
 sha256sums="38ccd1ceff41760ccfbaaa5394ebb6117d69bd0ea2e00bf07c0d1353c41be6ac  cryptsetup-1.6.6.tar.gz
 6ac335bb14ff2f90de00769be20da4c5527101fab6593259a4d87be84904ae67  flush-stdout.patch
+f95844d176b46c85dbe66bb7d929cfbc9f220bd41bc84b2a9047ad6e1dfdb559  strerror_r.patch
 0c30e081c0b8f879964ae49735f10b05a1d92f4f481042851958860945e13271  dmcrypt.confd
 02faf27470ea0e50b764c923786724847e77dfdf9680a50cc202546cad2bf02f  dmcrypt.initd"
 sha512sums="ce8ea9402f0eb9f3ab920df51837492802dd35394422ef4643a0eb82e6aad67cf72ac428b7caf622539af188f9fe5ba530f06b522f65ed55b0133c5c67ab2723  cryptsetup-1.6.6.tar.gz
 301e3e3da5a899e0a6f01f44fbf37bb6a3f5b6a4fb41243bae6d3b7aea747276e784626cd1b19721cc264652c10ae8c560c4d20094e33bb82fb2fae0160682c0  flush-stdout.patch
+c522c28b010d44fc8f14a8e997fd411505214c54b2c7070ed646e7ac0960dbfd0bbf450c9554361d8bdb45197812874ef14cb8508e00cf83601b05fc5bc2cd47  strerror_r.patch
 d04ae17d3708ef20ade7afb223d4ef19e1b6812e0be8f9499e37e9c71344568b42030d9dd8f6918a9bfb211a3a94b40a9354e3b32a009cb165e84508d0a5e14b  dmcrypt.confd
 660d1a29294e8e01343aea0b92d9159d42891261d41313c3f9e77ed3bd69e648d19d3799a8ad1b00884b6f4c0f48d4e12cb406ca291e64b789e71ba70ab3c29f  dmcrypt.initd"
diff --git a/main/cryptsetup/strerror_r.patch b/main/cryptsetup/strerror_r.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6dde3d514aa84e3aedbdbe6719b0e6fc796d36ec
--- /dev/null
+++ b/main/cryptsetup/strerror_r.patch
@@ -0,0 +1,23 @@
+diff --git a/src/utils_tools.c b/src/utils_tools.c
+index 4e8b0b4..1b4f3e5 100644
+--- a/src/utils_tools.c
++++ b/src/utils_tools.c
+@@ -176,11 +176,18 @@ void show_status(int errcode)
+ 	crypt_get_error(error, sizeof(error));
+ 
+ 	if (!error[0]) {
++#if defined(__GLIBC__)
++		/* GNU libc strerror_r is non-portable. */
+ 		error_ = strerror_r(-errcode, error, sizeof(error));
+ 		if (error_ != error) {
+ 			strncpy(error, error_, sizeof(error));
+ 			error[sizeof(error) - 1] = '\0';
+ 		}
++#else
++		/* POSIX variant */
++		if (strerror_r(-errcode, error, sizeof(error)) != 0)
++			error[0] = '\0';
++#endif
+ 	}
+ 
+ 	log_err(_("Command failed with code %i"), -errcode);