[CRIU] [PATCHv2 19/22] kdat: check compat support by EEXIST error

Dmitry Safonov dsafonov at virtuozzo.com
Wed Dec 7 09:56:34 PST 2016


More reliable way to check support of mapping 32-bit blob.

Signed-off-by: Dmitry Safonov <dsafonov at virtuozzo.com>
---
 criu/arch/x86/crtools.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/criu/arch/x86/crtools.c b/criu/arch/x86/crtools.c
index 9abc1fa5125c..119c791d2929 100644
--- a/criu/arch/x86/crtools.c
+++ b/criu/arch/x86/crtools.c
@@ -28,7 +28,6 @@
 #include "images/creds.pb-c.h"
 
 #ifdef CONFIG_X86_64
-/* Remaps 64-bit vDSO on the same addr, where it already is */
 int kdat_compat_sigreturn_test(void)
 {
 	unsigned long auxval;
@@ -41,14 +40,13 @@ int kdat_compat_sigreturn_test(void)
 		return 0;
 	}
 	/*
-	 * Mapping vDSO on very low unaligned address (1).
-	 * We will get ENOMEM or EPERM if ARCH_MAP_VDSO_* exist,
-	 * and ENOSYS if patches aren't in kernel.
+	 * Mapping vDSO while have not unmap it yet:
+	 * this is restricted by API if ARCH_MAP_VDSO_* is supported.
 	 */
 	ret = syscall(SYS_arch_prctl, ARCH_MAP_VDSO_32, 1);
-	if (ret == -1 && errno == ENOSYS)
-		return 0;
-	return 1;
+	if (ret == -1 && errno == EEXIST)
+		return 1;
+	return 0;
 }
 #endif /* CONFIG_X86_64 */
 
-- 
2.10.2



More information about the CRIU mailing list