diff --git a/SOURCES/cryptsetup-1.7.6-fix-blockwise-access-functions-for-64k-page-size.patch b/SOURCES/cryptsetup-1.7.6-fix-blockwise-access-functions-for-64k-page-size.patch
new file mode 100644
index 0000000..2c82dff
--- /dev/null
+++ b/SOURCES/cryptsetup-1.7.6-fix-blockwise-access-functions-for-64k-page-size.patch
@@ -0,0 +1,50 @@
+diff -rupN cryptsetup-1.7.4.bcp/lib/utils.c cryptsetup-1.7.4/lib/utils.c
+--- cryptsetup-1.7.4.bcp/lib/utils.c	2017-10-18 11:39:01.694902755 +0200
++++ cryptsetup-1.7.4/lib/utils.c	2017-10-18 11:48:16.584868357 +0200
+@@ -252,21 +252,21 @@ ssize_t write_lseek_blockwise(int fd, in
+ 		if (!frontPadBuf)
+ 			goto out;
+ 
+-		r = read_buffer(fd, frontPadBuf, bsize);
+-		if (r < 0 || r != bsize)
+-			goto out;
+-
+ 		innerCount = bsize - frontHang;
+ 		if (innerCount > count)
+ 			innerCount = count;
+ 
++		r = read_buffer(fd, frontPadBuf, bsize);
++		if (r < (frontHang + innerCount))
++			goto out;
++
+ 		memcpy(frontPadBuf + frontHang, buf, innerCount);
+ 
+ 		if (lseek(fd, offset - frontHang, SEEK_SET) < 0)
+ 			goto out;
+ 
+-		r = write_buffer(fd, frontPadBuf, bsize);
+-		if (r < 0 || r != bsize)
++		r = write_buffer(fd, frontPadBuf, frontHang + innerCount);
++		if (r != (frontHang + innerCount))
+ 			goto out;
+ 
+ 		buf = (char*)buf + innerCount;
+@@ -311,14 +311,14 @@ ssize_t read_lseek_blockwise(int fd, int
+ 		if (!frontPadBuf)
+ 			return ret;
+ 
+-		r = read_buffer(fd, frontPadBuf, bsize);
+-		if (r < 0 || r != bsize)
+-			goto out;
+-
+ 		innerCount = bsize - frontHang;
+ 		if (innerCount > count)
+ 			innerCount = count;
+ 
++		r = read_buffer(fd, frontPadBuf, bsize);
++		if (r < (frontHang + innerCount))
++			goto out;
++
+ 		memcpy(buf, frontPadBuf + frontHang, innerCount);
+ 
+ 		buf = (char*)buf + innerCount;
diff --git a/SPECS/cryptsetup.spec b/SPECS/cryptsetup.spec
index 02b1dac..6525c83 100644
--- a/SPECS/cryptsetup.spec
+++ b/SPECS/cryptsetup.spec
@@ -5,7 +5,7 @@
 Summary: A utility for setting up encrypted disks
 Name: cryptsetup
 Version: 1.7.4
-Release: 3%{?dist}
+Release: 3%{?dist}.1
 License: GPLv2+ and LGPLv2+
 Group: Applications/System
 URL: https://gitlab.com/cryptsetup/cryptsetup
@@ -26,6 +26,7 @@ Source0: https://www.kernel.org/pub/linux/utils/cryptsetup/v1.6/cryptsetup-%{ups
 Patch0: %{name}-avoid-rh-kernel-bug.patch
 Patch1: %{name}-1.7.5-fix-unaligned-access-to-hidden-truecrypt.patch
 Patch2: %{name}-1.7.5-fix-luksformat-in-fips-mode.patch
+Patch3: %{name}-1.7.6-fix-blockwise-access-functions-for-64k-page-size.patch
 
 %if 0%{?fedora} >= 19 || 0%{?rhel} >= 7
 %define configure_cipher --enable-gcrypt-pbkdf2
@@ -114,6 +115,7 @@ for setting up disk encryption using dm-crypt kernel module.
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
 chmod -x python/pycryptsetup-test.py
 
 %if %{python3_enable}
@@ -209,6 +211,11 @@ install -m755 misc/dracut_90reencrypt/reencrypt.sh %{buildroot}/%{dracutmodulesd
 %clean
 
 %changelog
+* Thu Nov 16 2017 Ondrej Kozina <okozina@redhat.com> - 1.7.4-3.el7_4.1
+- patch: fix regression in blockwise functions (archs with 64 KiB
+  page_size)
+- Resolves: #1510841
+
 * Tue Apr 25 2017 Ondrej Kozina <okozina@redhat.com> - 1.7.4-3
 - patch: fix luksFormat failure while running in FIPS mode.
 - Resolves: #1444137