Blame SOURCES/cryptsetup-new-avoid-rh-kernel-bug.patch

ad2d76
diff -rupN cryptsetup-2.0.3.old/lib/crypto_backend/crypto_cipher_kernel.c cryptsetup-2.0.3/lib/crypto_backend/crypto_cipher_kernel.c
ad2d76
--- cryptsetup-2.0.3.old/lib/crypto_backend/crypto_cipher_kernel.c	2018-04-17 09:20:35.000000000 +0200
ad2d76
+++ cryptsetup-2.0.3/lib/crypto_backend/crypto_cipher_kernel.c	2018-05-07 14:13:45.176124062 +0200
ad2d76
@@ -31,6 +31,7 @@
ad2d76
 #ifdef ENABLE_AF_ALG
ad2d76
 
ad2d76
 #include <linux/if_alg.h>
ad2d76
+#include <sys/utsname.h>
ad2d76
 
ad2d76
 #ifndef AF_ALG
ad2d76
 #define AF_ALG 38
ad2d76
@@ -44,6 +45,36 @@ struct crypt_cipher {
ad2d76
 	int opfd;
ad2d76
 };
ad2d76
 
ad2d76
+ 
ad2d76
+static size_t pagesize(size_t defsize)
ad2d76
+{
ad2d76
+	long r = sysconf(_SC_PAGESIZE);
ad2d76
+	return r < 0 ? defsize : (size_t)r;
ad2d76
+}
ad2d76
+
ad2d76
+static int check_rh_kernel_version(void)
ad2d76
+{
ad2d76
+	unsigned maj, mid, min, rel;
ad2d76
+	static struct utsname uts = {{ 0 }};
ad2d76
+	size_t ps = pagesize(32768);
ad2d76
+
ad2d76
+	if (ps < 32768)
ad2d76
+		return 0;
ad2d76
+
ad2d76
+	if (!*uts.release && uname(&uts) < 0)
ad2d76
+		return -ENOTSUP;
ad2d76
+	/*
ad2d76
+	 * RH kernels 3.10.0-185 and lower are affected by a crypto API kernel
ad2d76
+	 * socket bug. The bug only manifests on archs with page size >= 32 KiB.
ad2d76
+	 *
ad2d76
+	 * For reference, see rhbz#1136075
ad2d76
+	 */
ad2d76
+	if (sscanf(uts.release, "%u.%u.%u-%u", &maj, &mid, &min, &rel) == 4)
ad2d76
+		return (maj == 3 && mid == 10 && min == 0 && rel < 186) ? -ENOTSUP : 0;
ad2d76
+
ad2d76
+	return -ENOTSUP;
ad2d76
+}
ad2d76
+
ad2d76
 /*
ad2d76
  * ciphers
ad2d76
  *
ad2d76
@@ -60,6 +91,9 @@ int crypt_cipher_init(struct crypt_ciphe
ad2d76
 		.salg_type = "skcipher",
ad2d76
 	};
ad2d76
 
ad2d76
+	if (check_rh_kernel_version())
ad2d76
+		return -ENOTSUP;
ad2d76
+
ad2d76
 	h = malloc(sizeof(*h));
ad2d76
 	if (!h)
ad2d76
 		return -ENOMEM;
ad2d76
Binary files cryptsetup-2.0.3.old/lib/crypto_backend/.crypto_cipher_kernel.c.rej.swp and cryptsetup-2.0.3/lib/crypto_backend/.crypto_cipher_kernel.c.rej.swp differ