All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/9] ckpt-v19-rc3 cleanups
@ 2010-02-09  1:59 serue-r/Jw6+rmf7HQT0dZR+AlfA
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  1:59 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

Sorry, some of these I've sent before, but here is the set I currently
have on top of ckpt-v19-rc3.  Boy is this painful - there are at least
still 32->64 or vice-versa problems with: ipc_shm restore, signals
(I think) and, in 32-bit restore of a x86-64 32-bit image, restore_cpu.
I'll keep pushing at this tomorrow.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 1/9] Use CKPT_ARCH_X86_32 for all x86 CKPT_ARCH_IDs
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
@ 2010-02-09  1:59   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
       [not found]     ` <1265680806-13295-2-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  2010-02-09  1:59   ` [PATCH 2/9] restart only same bit-ness serue-r/Jw6+rmf7HQT0dZR+AlfA
                     ` (8 subsequent siblings)
  9 siblings, 1 reply; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  1:59 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

Sure we can rename it eventually, but I'm still just experimenting...

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 arch/x86/include/asm/checkpoint_hdr.h |    6 ------
 1 files changed, 0 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/checkpoint_hdr.h b/arch/x86/include/asm/checkpoint_hdr.h
index 535a9c6..a1edeb6 100644
--- a/arch/x86/include/asm/checkpoint_hdr.h
+++ b/arch/x86/include/asm/checkpoint_hdr.h
@@ -36,13 +36,7 @@
 #include <asm/processor.h>
 #endif
 
-#ifdef CONFIG_X86_64
-#define CKPT_ARCH_ID	CKPT_ARCH_X86_64
-#endif
-
-#ifdef CONFIG_X86_32
 #define CKPT_ARCH_ID	CKPT_ARCH_X86_32
-#endif
 
 /* arch dependent header types */
 enum {
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 2/9] restart only same bit-ness
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  2010-02-09  1:59   ` [PATCH 1/9] Use CKPT_ARCH_X86_32 for all x86 CKPT_ARCH_IDs serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09  1:59   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
  2010-02-09  2:00   ` [PATCH 3/9] x86_64: keep __u32s in even groups serue-r/Jw6+rmf7HQT0dZR+AlfA
                     ` (7 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  1:59 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

    Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 arch/x86/kernel/checkpoint.c |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kernel/checkpoint.c b/arch/x86/kernel/checkpoint.c
index 5952e27..b01a2fc 100644
--- a/arch/x86/kernel/checkpoint.c
+++ b/arch/x86/kernel/checkpoint.c
@@ -283,12 +283,21 @@ int restore_thread(struct ckpt_ctx *ctx)
 	load_TLS(thread, cpu);
 	put_cpu();
 
-#if defined(CONFIG_X86_64) && defined(CONFIG_COMPAT)
-	if (h->thread_info_flags & _TIF_IA32)
-		set_thread_flag(TIF_IA32);
-	else
-		clear_thread_flag(TIF_IA32);
-#endif
+	{
+		int pre, post;
+		/*
+		 * Eventually we'd like to support mixed-bit restart, but for
+		 * now don't pretend to.
+		 */
+		pre = test_thread_flag(TIF_IA32);
+		post = h->thread_info_flags & _TIF_IA32;
+		if ((pre && !post) || (post && !pre)) {
+			ret = -EINVAL;
+			ckpt_err(ctx, ret, "%d-bit restarting %d-bit\n",
+				pre ? 32 : 64, post ? 32 : 64);
+			goto out;
+		}
+	}
 
 	/* TODO: restore TIF flags as necessary (e.g. TIF_NOTSC) */
 
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 3/9] x86_64: keep __u32s in even groups
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  2010-02-09  1:59   ` [PATCH 1/9] Use CKPT_ARCH_X86_32 for all x86 CKPT_ARCH_IDs serue-r/Jw6+rmf7HQT0dZR+AlfA
  2010-02-09  1:59   ` [PATCH 2/9] restart only same bit-ness serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09  2:00   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
  2010-02-09  2:00   ` [PATCH 4/9] x86_32: add TIF_IA32 to thread flags serue-r/Jw6+rmf7HQT0dZR+AlfA
                     ` (6 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  2:00 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

Otherwise the struct will be different size on x86-32 and x86-64.

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 include/linux/checkpoint_hdr.h |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
index e591fd1..5a68178 100644
--- a/include/linux/checkpoint_hdr.h
+++ b/include/linux/checkpoint_hdr.h
@@ -345,6 +345,9 @@ struct ckpt_hdr_task {
 	__u32 exit_code;
 	__u32 exit_signal;
 	__u32 pdeath_signal;
+	__u32 compat_robust_futex_head_len;
+	__u32 compat_robust_futex_list; /* a compat __user ptr */
+	__u32 robust_futex_head_len;
 
 #ifdef CONFIG_AUDITSYSCALL
 	/* would audit want to track the checkpointed ids,
@@ -354,9 +357,6 @@ struct ckpt_hdr_task {
 	__u64 set_child_tid;
 	__u64 clear_child_tid;
 
-	__u32 compat_robust_futex_head_len;
-	__u32 compat_robust_futex_list; /* a compat __user ptr */
-	__u32 robust_futex_head_len;
 	__u64 robust_futex_list; /* a __user ptr */
 } __attribute__((aligned(8)));
 
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 4/9] x86_32: add TIF_IA32 to thread flags
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
                     ` (2 preceding siblings ...)
  2010-02-09  2:00   ` [PATCH 3/9] x86_64: keep __u32s in even groups serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09  2:00   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
  2010-02-09  2:00   ` [PATCH 5/9] use ckpt_err for architecture mismatch errors serue-r/Jw6+rmf7HQT0dZR+AlfA
                     ` (5 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  2:00 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

X86-32 does not set TIF_IA32 on tasks.  But since we now use the
same CKPT_ARCH_ID for X86-32 and X86-64, this means that when we
restart a task from X86-32 on X86-64, we can't tell that it should
have been 32-bit.

So always set TIF_IA32 in thread_info_flags for a task when
checkpointing on X86-32.

Likewise, at restart, when comparing the current task (the running
restart binary) to the checkpointed one (to be restarted) to make
sure both are either 32-bit or 64-bit, we obviously can't count
on TIF_IA32 being set in current_flags on X86-32.

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 arch/x86/kernel/checkpoint.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/checkpoint.c b/arch/x86/kernel/checkpoint.c
index b01a2fc..961b131 100644
--- a/arch/x86/kernel/checkpoint.c
+++ b/arch/x86/kernel/checkpoint.c
@@ -103,6 +103,9 @@ int checkpoint_thread(struct ckpt_ctx *ctx, struct task_struct *t)
 
 	h->thread_info_flags =
 		task_thread_info(t)->flags & ~CKPT_X86_TIF_UNSUPPORTED;
+#ifndef CONFIG_X86_64
+	h->thread_info_flags |= _TIF_IA32;
+#endif
 	h->gdt_entry_tls_entries = GDT_ENTRY_TLS_ENTRIES;
 	h->sizeof_tls_array = tls_size;
 
@@ -289,7 +292,11 @@ int restore_thread(struct ckpt_ctx *ctx)
 		 * Eventually we'd like to support mixed-bit restart, but for
 		 * now don't pretend to.
 		 */
+#ifndef CONFIG_X86_64
+		pre = 1;
+#else
 		pre = test_thread_flag(TIF_IA32);
+#endif
 		post = h->thread_info_flags & _TIF_IA32;
 		if ((pre && !post) || (post && !pre)) {
 			ret = -EINVAL;
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 5/9] use ckpt_err for architecture mismatch errors
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
                     ` (3 preceding siblings ...)
  2010-02-09  2:00   ` [PATCH 4/9] x86_32: add TIF_IA32 to thread flags serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09  2:00   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
       [not found]     ` <1265680806-13295-6-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  2010-02-09  2:00   ` [PATCH 6/9] Make AT_VECTOR_SIZE_ARCH 2 for x86-32 serue-r/Jw6+rmf7HQT0dZR+AlfA
                     ` (4 subsequent siblings)
  9 siblings, 1 reply; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  2:00 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 arch/x86/kernel/checkpoint.c |    4 +++-
 checkpoint/restart.c         |   18 ++++++++++++++----
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kernel/checkpoint.c b/arch/x86/kernel/checkpoint.c
index 961b131..7c73983 100644
--- a/arch/x86/kernel/checkpoint.c
+++ b/arch/x86/kernel/checkpoint.c
@@ -465,8 +465,10 @@ int restore_read_header_arch(struct ckpt_ctx *ctx)
 	/* verify FPU capabilities */
 	if (h->has_fxsr != cpu_has_fxsr ||
 	    h->has_xsave != cpu_has_xsave ||
-	    h->xstate_size != xstate_size)
+	    h->xstate_size != xstate_size) {
 		ret = -EINVAL;
+		ckpt_err(ctx, ret, "incompatible FPU capabilities");
+	}
 
 	ckpt_hdr_put(ctx, h);
 	return ret;
diff --git a/checkpoint/restart.c b/checkpoint/restart.c
index fcd07fa..9bb17fc 100644
--- a/checkpoint/restart.c
+++ b/checkpoint/restart.c
@@ -569,12 +569,14 @@ static int check_kernel_const(struct ckpt_const *h)
 		return -EINVAL;
 	if (h->uts_nodename_len != sizeof(uts->nodename))
 		return -EINVAL;
+#if 0
 	if (h->uts_release_len != sizeof(uts->release))
 		return -EINVAL;
 	if (h->uts_version_len != sizeof(uts->version))
 		return -EINVAL;
 	if (h->uts_machine_len != sizeof(uts->machine))
 		return -EINVAL;
+#endif
 	if (h->uts_domainname_len != sizeof(uts->domainname))
 		return -EINVAL;
 	/* rlimit */
@@ -601,20 +603,28 @@ static int restore_read_header(struct ckpt_ctx *ctx)
 		return PTR_ERR(h);
 
 	ret = -EINVAL;
-	if (le16_to_cpu(h->arch_id) != CKPT_ARCH_ID)
+	if (le16_to_cpu(h->arch_id) != CKPT_ARCH_ID) {
+		ckpt_err(ctx, ret, "incompatible ARCH_ID");
 		goto out;
+	}
 	if (h->magic != CHECKPOINT_MAGIC_HEAD ||
 	    h->rev != CHECKPOINT_VERSION ||
 	    h->major != ((LINUX_VERSION_CODE >> 16) & 0xff) ||
 	    h->minor != ((LINUX_VERSION_CODE >> 8) & 0xff) ||
-	    h->patch != ((LINUX_VERSION_CODE) & 0xff))
+	    h->patch != ((LINUX_VERSION_CODE) & 0xff)) {
+		ckpt_err(ctx, ret, "incompatible VERSION");
 		goto out;
-	if (h->uflags & ~CHECKPOINT_USER_FLAGS)
+	}
+	if (h->uflags & ~CHECKPOINT_USER_FLAGS) {
+		ckpt_err(ctx, ret, "bad restart user flags");
 		goto out;
+	}
 
 	ret = check_kernel_const(&h->constants);
-	if (ret < 0)
+	if (ret < 0) {
+		ckpt_err(ctx, ret, "incompatible kernel constants");
 		goto out;
+	}
 
 	ret = -ENOMEM;
 	uts = kmalloc(sizeof(*uts), GFP_KERNEL);
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 6/9] Make AT_VECTOR_SIZE_ARCH 2 for x86-32
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
                     ` (4 preceding siblings ...)
  2010-02-09  2:00   ` [PATCH 5/9] use ckpt_err for architecture mismatch errors serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09  2:00   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
       [not found]     ` <1265680806-13295-7-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  2010-02-09  2:00   ` [PATCH 7/9] cr: checkpoint saved_auxv as u64s serue-r/Jw6+rmf7HQT0dZR+AlfA
                     ` (3 subsequent siblings)
  9 siblings, 1 reply; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  2:00 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

Both x86-32 and x86-64 with 32-bit compat use ARCH_DLINFO_IA32,
which defines two saved_auxv entries.  But system.h only defines
AT_VECTOR_SIZE_ARCH as 2 for CONFIG_IA32_EMULATION, not for
CONFIG_X86_32.  Fix that.

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 arch/x86/include/asm/system.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h
index ecb544e..e04740f 100644
--- a/arch/x86/include/asm/system.h
+++ b/arch/x86/include/asm/system.h
@@ -11,9 +11,9 @@
 #include <linux/irqflags.h>
 
 /* entries in ARCH_DLINFO: */
-#ifdef CONFIG_IA32_EMULATION
+#if defined(CONFIG_IA32_EMULATION) || !defined(CONFIG_X86_64)
 # define AT_VECTOR_SIZE_ARCH 2
-#else
+#else /* else it's non-compat x86-64 */
 # define AT_VECTOR_SIZE_ARCH 1
 #endif
 
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 7/9] cr: checkpoint saved_auxv as u64s
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
                     ` (5 preceding siblings ...)
  2010-02-09  2:00   ` [PATCH 6/9] Make AT_VECTOR_SIZE_ARCH 2 for x86-32 serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09  2:00   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
       [not found]     ` <1265680806-13295-8-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  2010-02-09  2:00   ` [PATCH 8/9] fix potential use-before-set ret in arch/x86/vdso/vma.c serue-r/Jw6+rmf7HQT0dZR+AlfA
                     ` (2 subsequent siblings)
  9 siblings, 1 reply; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  2:00 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

unsigned longs are not a good value to checkpoint between
x86-32 and x86-64 32-bit tasks :)

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 checkpoint/checkpoint.c        |    5 +--
 checkpoint/memory.c            |   53 +++++++++++++++++++++++++++++++++++++--
 checkpoint/restart.c           |    6 ++--
 include/linux/checkpoint_hdr.h |    2 +-
 4 files changed, 56 insertions(+), 10 deletions(-)

diff --git a/checkpoint/checkpoint.c b/checkpoint/checkpoint.c
index b4e0021..b3c1c4f 100644
--- a/checkpoint/checkpoint.c
+++ b/checkpoint/checkpoint.c
@@ -103,13 +103,12 @@ int ckpt_write_string(struct ckpt_ctx *ctx, char *str, int len)
 static void fill_kernel_const(struct ckpt_const *h)
 {
 	struct task_struct *tsk;
-	struct mm_struct *mm;
 	struct new_utsname *uts;
 
 	/* task */
 	h->task_comm_len = sizeof(tsk->comm);
-	/* mm */
-	h->mm_saved_auxv_len = sizeof(mm->saved_auxv);
+	/* mm->saved_auxv size */
+	h->at_vector_size = AT_VECTOR_SIZE;
 	/* signal */
 	h->signal_nsig = _NSIG;
 	/* uts */
diff --git a/checkpoint/memory.c b/checkpoint/memory.c
index d51f94b..5058ab3 100644
--- a/checkpoint/memory.c
+++ b/checkpoint/memory.c
@@ -661,6 +661,25 @@ static int checkpoint_vmas(struct ckpt_ctx *ctx, struct mm_struct *mm)
 	return ret < 0 ? ret : map_count;
 }
 
+#define CKPT_AT_SZ (AT_VECTOR_SIZE * sizeof(u64))
+/*
+ * We always write saved_auxv out as an array of u64s, though it is
+ * an array of u32s on 32-bit arch.
+ */
+static int ckpt_write_auxv(struct ckpt_ctx *ctx, struct mm_struct *mm)
+{
+	int i, ret;
+	u64 *buf = kzalloc(CKPT_AT_SZ, GFP_KERNEL);
+
+	if (!buf)
+		return -ENOMEM;
+	for (i=0; i<AT_VECTOR_SIZE; i++)
+		buf[i] = mm->saved_auxv[i];
+	ret = ckpt_write_buffer(ctx, buf, CKPT_AT_SZ);
+	kfree(buf);
+	return ret;
+}
+
 static int do_checkpoint_mm(struct ckpt_ctx *ctx, struct mm_struct *mm)
 {
 	struct ckpt_hdr_mm *h;
@@ -718,7 +737,7 @@ static int do_checkpoint_mm(struct ckpt_ctx *ctx, struct mm_struct *mm)
 	if (ret < 0)
 		goto out;
 
-	ret = ckpt_write_buffer(ctx, mm->saved_auxv, sizeof(mm->saved_auxv));
+	ret = ckpt_write_auxv(ctx, mm);
 	if (ret < 0)
 		return ret;
 
@@ -1205,6 +1224,32 @@ static int restore_vma(struct ckpt_ctx *ctx, struct mm_struct *mm)
 	return ret;
 }
 
+static int ckpt_read_auxv(struct ckpt_ctx *ctx, struct mm_struct *mm)
+{
+	int i, ret;
+	u64 *buf = kmalloc(CKPT_AT_SZ, GFP_KERNEL);
+
+	if (!buf)
+		return -ENOMEM;
+	ret = _ckpt_read_buffer(ctx, buf, CKPT_AT_SZ);
+	if (ret < 0) {
+		kfree(buf);
+		return ret;
+	}
+
+	for (i=0; i<AT_VECTOR_SIZE; i++)
+		if (buf[i] > (u64) ULONG_MAX) {
+			kfree(buf);
+			return -E2BIG;
+		}
+
+	for (i=0; i<AT_VECTOR_SIZE; i++)
+		mm->saved_auxv[i] = buf[i];
+
+	kfree(buf);
+	return 0;
+}
+
 static struct mm_struct *do_restore_mm(struct ckpt_ctx *ctx)
 {
 	struct ckpt_hdr_mm *h;
@@ -1270,9 +1315,11 @@ static struct mm_struct *do_restore_mm(struct ckpt_ctx *ctx)
 	}
 	up_write(&mm->mmap_sem);
 
-	ret = _ckpt_read_buffer(ctx, mm->saved_auxv, sizeof(mm->saved_auxv));
-	if (ret < 0)
+	ret = ckpt_read_auxv(ctx, mm);
+	if (ret < 0) {
+		ckpt_err(ctx, ret, "Error restoring auxv\n");
 		goto out;
+	}
 
 	for (nr = h->map_count; nr; nr--) {
 		ret = restore_vma(ctx, mm);
diff --git a/checkpoint/restart.c b/checkpoint/restart.c
index 9bb17fc..a5f30f2 100644
--- a/checkpoint/restart.c
+++ b/checkpoint/restart.c
@@ -552,15 +552,15 @@ int ckpt_read_consume(struct ckpt_ctx *ctx, int len, int type)
 static int check_kernel_const(struct ckpt_const *h)
 {
 	struct task_struct *tsk;
-	struct mm_struct *mm;
 	struct new_utsname *uts;
 
 	/* task */
 	if (h->task_comm_len != sizeof(tsk->comm))
 		return -EINVAL;
-	/* mm */
-	if (h->mm_saved_auxv_len != sizeof(mm->saved_auxv))
+	/* mm->saved_auxv size */
+	if (h->at_vector_size != AT_VECTOR_SIZE)
 		return -EINVAL;
+
 	/* signal */
 	if (h->signal_nsig != _NSIG)
 		return -EINVAL;
diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
index 5a68178..b5dd95c 100644
--- a/include/linux/checkpoint_hdr.h
+++ b/include/linux/checkpoint_hdr.h
@@ -262,7 +262,7 @@ struct ckpt_const {
 	/* task */
 	__u16 task_comm_len;
 	/* mm */
-	__u16 mm_saved_auxv_len;
+	__u16 at_vector_size;
 	/* signal */
 	__u16 signal_nsig;
 	/* uts */
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 8/9] fix potential use-before-set ret in arch/x86/vdso/vma.c
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
                     ` (6 preceding siblings ...)
  2010-02-09  2:00   ` [PATCH 7/9] cr: checkpoint saved_auxv as u64s serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09  2:00   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
  2010-02-09  2:00   ` [PATCH 9/9] mm/mmap.c:do_munmap(): remove unused local vars serue-r/Jw6+rmf7HQT0dZR+AlfA
  2010-02-09 22:04   ` [PATCH 0/9] ckpt-v19-rc3 cleanups Oren Laadan
  9 siblings, 0 replies; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  2:00 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

(should be folded into
	"c/r: extend arch_setup_additional_pages()"
)

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 arch/x86/vdso/vma.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c
index 393b22a..b10ed32 100644
--- a/arch/x86/vdso/vma.c
+++ b/arch/x86/vdso/vma.c
@@ -104,7 +104,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm,
 {
 	struct mm_struct *mm = current->mm;
 	unsigned long addr;
-	int ret;
+	int ret = -EINVAL;
 
 	if (!vdso_enabled)
 		return 0;
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 9/9] mm/mmap.c:do_munmap(): remove unused local vars
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
                     ` (7 preceding siblings ...)
  2010-02-09  2:00   ` [PATCH 8/9] fix potential use-before-set ret in arch/x86/vdso/vma.c serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09  2:00   ` serue-r/Jw6+rmf7HQT0dZR+AlfA
  2010-02-09 22:04   ` [PATCH 0/9] ckpt-v19-rc3 cleanups Oren Laadan
  9 siblings, 0 replies; 20+ messages in thread
From: serue-r/Jw6+rmf7HQT0dZR+AlfA @ 2010-02-09  2:00 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 mm/mmap.c |    3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/mm/mmap.c b/mm/mmap.c
index 89c3d9c..75f5de3 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2014,9 +2014,6 @@ int do_munmap_nocheck(struct mm_struct *mm, unsigned long start, size_t len)
 
 int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
 {
-	unsigned long end;
-	struct vm_area_struct *vma, *prev, *last;
-
 	if ((start & ~PAGE_MASK) || start > TASK_SIZE || len > TASK_SIZE-start)
 		return -EINVAL;
 
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH 1/9] Use CKPT_ARCH_X86_32 for all x86 CKPT_ARCH_IDs
       [not found]     ` <1265680806-13295-2-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
@ 2010-02-09  2:04       ` Serge E. Hallyn
  2010-02-09  3:40       ` Oren Laadan
  1 sibling, 0 replies; 20+ messages in thread
From: Serge E. Hallyn @ 2010-02-09  2:04 UTC (permalink / raw)
  To: orenl-eQaUEPhvms7ENvBUuze7eA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

Quoting serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org (serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org):
> From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> 
> Sure we can rename it eventually, but I'm still just experimenting...

Let me elaborate on that before someone calls me on it:

I think the rest of the patches in this set should be applied.  This one should
not be applied until we get x86_32 -> x86_64 32-bit task c/r working.

> Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> ---
>  arch/x86/include/asm/checkpoint_hdr.h |    6 ------
>  1 files changed, 0 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/x86/include/asm/checkpoint_hdr.h b/arch/x86/include/asm/checkpoint_hdr.h
> index 535a9c6..a1edeb6 100644
> --- a/arch/x86/include/asm/checkpoint_hdr.h
> +++ b/arch/x86/include/asm/checkpoint_hdr.h
> @@ -36,13 +36,7 @@
>  #include <asm/processor.h>
>  #endif
> 
> -#ifdef CONFIG_X86_64
> -#define CKPT_ARCH_ID	CKPT_ARCH_X86_64
> -#endif
> -
> -#ifdef CONFIG_X86_32
>  #define CKPT_ARCH_ID	CKPT_ARCH_X86_32
> -#endif
> 
>  /* arch dependent header types */
>  enum {
> -- 
> 1.6.0.4

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 1/9] Use CKPT_ARCH_X86_32 for all x86 CKPT_ARCH_IDs
       [not found]     ` <1265680806-13295-2-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  2010-02-09  2:04       ` Serge E. Hallyn
@ 2010-02-09  3:40       ` Oren Laadan
  1 sibling, 0 replies; 20+ messages in thread
From: Oren Laadan @ 2010-02-09  3:40 UTC (permalink / raw)
  To: serue-r/Jw6+rmf7HQT0dZR+AlfA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg



serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> 
> Sure we can rename it eventually, but I'm still just experimenting...
> 
> Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> ---
>  arch/x86/include/asm/checkpoint_hdr.h |    6 ------
>  1 files changed, 0 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/x86/include/asm/checkpoint_hdr.h b/arch/x86/include/asm/checkpoint_hdr.h
> index 535a9c6..a1edeb6 100644
> --- a/arch/x86/include/asm/checkpoint_hdr.h
> +++ b/arch/x86/include/asm/checkpoint_hdr.h
> @@ -36,13 +36,7 @@
>  #include <asm/processor.h>
>  #endif
>  
> -#ifdef CONFIG_X86_64
> -#define CKPT_ARCH_ID	CKPT_ARCH_X86_64
> -#endif
> -
> -#ifdef CONFIG_X86_32
>  #define CKPT_ARCH_ID	CKPT_ARCH_X86_32
> -#endif

In the final version you probably want to get rid of "_32" too...

Oren.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 6/9] Make AT_VECTOR_SIZE_ARCH 2 for x86-32
       [not found]     ` <1265680806-13295-7-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
@ 2010-02-09  3:42       ` Oren Laadan
       [not found]         ` <4B70D98F.20303-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
  0 siblings, 1 reply; 20+ messages in thread
From: Oren Laadan @ 2010-02-09  3:42 UTC (permalink / raw)
  To: serue-r/Jw6+rmf7HQT0dZR+AlfA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg


Are you going to send this to mainline ?

serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> 
> Both x86-32 and x86-64 with 32-bit compat use ARCH_DLINFO_IA32,
> which defines two saved_auxv entries.  But system.h only defines
> AT_VECTOR_SIZE_ARCH as 2 for CONFIG_IA32_EMULATION, not for
> CONFIG_X86_32.  Fix that.
> 
> Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> ---
>  arch/x86/include/asm/system.h |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h
> index ecb544e..e04740f 100644
> --- a/arch/x86/include/asm/system.h
> +++ b/arch/x86/include/asm/system.h
> @@ -11,9 +11,9 @@
>  #include <linux/irqflags.h>
>  
>  /* entries in ARCH_DLINFO: */
> -#ifdef CONFIG_IA32_EMULATION
> +#if defined(CONFIG_IA32_EMULATION) || !defined(CONFIG_X86_64)
>  # define AT_VECTOR_SIZE_ARCH 2
> -#else
> +#else /* else it's non-compat x86-64 */
>  # define AT_VECTOR_SIZE_ARCH 1
>  #endif
>  

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 5/9] use ckpt_err for architecture mismatch errors
       [not found]     ` <1265680806-13295-6-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
@ 2010-02-09  3:52       ` Oren Laadan
       [not found]         ` <4B70DBF9.30105-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
  0 siblings, 1 reply; 20+ messages in thread
From: Oren Laadan @ 2010-02-09  3:52 UTC (permalink / raw)
  To: serue-r/Jw6+rmf7HQT0dZR+AlfA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg



serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> 
> Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> ---
>  arch/x86/kernel/checkpoint.c |    4 +++-
>  checkpoint/restart.c         |   18 ++++++++++++++----
>  2 files changed, 17 insertions(+), 5 deletions(-)
> 

[...]

> diff --git a/checkpoint/restart.c b/checkpoint/restart.c
> index fcd07fa..9bb17fc 100644
> --- a/checkpoint/restart.c
> +++ b/checkpoint/restart.c
> @@ -569,12 +569,14 @@ static int check_kernel_const(struct ckpt_const *h)
>  		return -EINVAL;
>  	if (h->uts_nodename_len != sizeof(uts->nodename))
>  		return -EINVAL;
> +#if 0
>  	if (h->uts_release_len != sizeof(uts->release))
>  		return -EINVAL;
>  	if (h->uts_version_len != sizeof(uts->version))
>  		return -EINVAL;
>  	if (h->uts_machine_len != sizeof(uts->machine))
>  		return -EINVAL;
> +#endif

What is the purpose of this ?  I thought these sizes do not
depends on the kernel bit-ness.

>  	if (h->uts_domainname_len != sizeof(uts->domainname))
>  		return -EINVAL;
>  	/* rlimit */

[...]

Oren.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 6/9] Make AT_VECTOR_SIZE_ARCH 2 for x86-32
       [not found]         ` <4B70D98F.20303-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
@ 2010-02-09  3:58           ` Serge E. Hallyn
  0 siblings, 0 replies; 20+ messages in thread
From: Serge E. Hallyn @ 2010-02-09  3:58 UTC (permalink / raw)
  To: Oren Laadan; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

Sent it a few hours ago.

http://lkml.org/lkml/2010/2/8/388


Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
> 
> Are you going to send this to mainline ?
> 
> serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> > From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> > 
> > Both x86-32 and x86-64 with 32-bit compat use ARCH_DLINFO_IA32,
> > which defines two saved_auxv entries.  But system.h only defines
> > AT_VECTOR_SIZE_ARCH as 2 for CONFIG_IA32_EMULATION, not for
> > CONFIG_X86_32.  Fix that.
> > 
> > Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> > ---
> >  arch/x86/include/asm/system.h |    4 ++--
> >  1 files changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h
> > index ecb544e..e04740f 100644
> > --- a/arch/x86/include/asm/system.h
> > +++ b/arch/x86/include/asm/system.h
> > @@ -11,9 +11,9 @@
> >  #include <linux/irqflags.h>
> >  
> >  /* entries in ARCH_DLINFO: */
> > -#ifdef CONFIG_IA32_EMULATION
> > +#if defined(CONFIG_IA32_EMULATION) || !defined(CONFIG_X86_64)
> >  # define AT_VECTOR_SIZE_ARCH 2
> > -#else
> > +#else /* else it's non-compat x86-64 */
> >  # define AT_VECTOR_SIZE_ARCH 1
> >  #endif
> >  
> _______________________________________________
> Containers mailing list
> Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
> https://lists.linux-foundation.org/mailman/listinfo/containers

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 5/9] use ckpt_err for architecture mismatch errors
       [not found]         ` <4B70DBF9.30105-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
@ 2010-02-09  3:59           ` Serge E. Hallyn
  0 siblings, 0 replies; 20+ messages in thread
From: Serge E. Hallyn @ 2010-02-09  3:59 UTC (permalink / raw)
  To: Oren Laadan; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
> 
> 
> serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> > From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> > 
> > Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> > ---
> >  arch/x86/kernel/checkpoint.c |    4 +++-
> >  checkpoint/restart.c         |   18 ++++++++++++++----
> >  2 files changed, 17 insertions(+), 5 deletions(-)
> > 
> 
> [...]
> 
> > diff --git a/checkpoint/restart.c b/checkpoint/restart.c
> > index fcd07fa..9bb17fc 100644
> > --- a/checkpoint/restart.c
> > +++ b/checkpoint/restart.c
> > @@ -569,12 +569,14 @@ static int check_kernel_const(struct ckpt_const *h)
> >  		return -EINVAL;
> >  	if (h->uts_nodename_len != sizeof(uts->nodename))
> >  		return -EINVAL;
> > +#if 0
> >  	if (h->uts_release_len != sizeof(uts->release))
> >  		return -EINVAL;
> >  	if (h->uts_version_len != sizeof(uts->version))
> >  		return -EINVAL;
> >  	if (h->uts_machine_len != sizeof(uts->machine))
> >  		return -EINVAL;
> > +#endif
> 
> What is the purpose of this ?  I thought these sizes do not
> depends on the kernel bit-ness.

Jinkeys - yeah that shouldn't be there.

> >  	if (h->uts_domainname_len != sizeof(uts->domainname))
> >  		return -EINVAL;
> >  	/* rlimit */
> 
> [...]
> 
> Oren.
> 
> _______________________________________________
> Containers mailing list
> Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
> https://lists.linux-foundation.org/mailman/listinfo/containers

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 7/9] cr: checkpoint saved_auxv as u64s
       [not found]     ` <1265680806-13295-8-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
@ 2010-02-09 17:20       ` Oren Laadan
       [not found]         ` <4B71994E.10105-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
  0 siblings, 1 reply; 20+ messages in thread
From: Oren Laadan @ 2010-02-09 17:20 UTC (permalink / raw)
  To: serue-r/Jw6+rmf7HQT0dZR+AlfA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg



serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> 
> unsigned longs are not a good value to checkpoint between
> x86-32 and x86-64 32-bit tasks :)
> 
> Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> ---
>  checkpoint/checkpoint.c        |    5 +--
>  checkpoint/memory.c            |   53 +++++++++++++++++++++++++++++++++++++--
>  checkpoint/restart.c           |    6 ++--
>  include/linux/checkpoint_hdr.h |    2 +-
>  4 files changed, 56 insertions(+), 10 deletions(-)

[...]

Sketch for a sanity check:

> +static int ckpt_read_auxv(struct ckpt_ctx *ctx, struct mm_struct *mm)
> +{
> +	int i, ret;
> +	u64 *buf = kmalloc(CKPT_AT_SZ, GFP_KERNEL);
> +
> +	if (!buf)
> +		return -ENOMEM;
> +	ret = _ckpt_read_buffer(ctx, buf, CKPT_AT_SZ);
> +	if (ret < 0) {
> +		kfree(buf);
> +		return ret;
> +	}
> +

	ret = -E2BIG;
> +	for (i=0; i<AT_VECTOR_SIZE; i++)
> +		if (buf[i] > (u64) ULONG_MAX)
			goto out;

	ret = -EINVAL;
	for (i=0; i<AT_VECTOR_SIZE; i++)
		if (mm->saved_auxv[i] == AT_NULL)
			ret = 0;
	if (ret < 0)
		goto out;

> +
> +	for (i=0; i<AT_VECTOR_SIZE; i++)
> +		mm->saved_auxv[i] = buf[i];
> +
 out:
> +	kfree(buf);
> +	return 0;
	       ret;

[...]

Oren.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 7/9] cr: checkpoint saved_auxv as u64s
       [not found]         ` <4B71994E.10105-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
@ 2010-02-09 20:20           ` Serge E. Hallyn
       [not found]             ` <20100209202035.GC29094-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 20+ messages in thread
From: Serge E. Hallyn @ 2010-02-09 20:20 UTC (permalink / raw)
  To: Oren Laadan; +Cc: containers-qjLDD68F18O7TbgM5vRIOg

Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
> 
> 
> serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> > From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> > 
> > unsigned longs are not a good value to checkpoint between
> > x86-32 and x86-64 32-bit tasks :)
> > 
> > Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> > ---
> >  checkpoint/checkpoint.c        |    5 +--
> >  checkpoint/memory.c            |   53 +++++++++++++++++++++++++++++++++++++--
> >  checkpoint/restart.c           |    6 ++--
> >  include/linux/checkpoint_hdr.h |    2 +-
> >  4 files changed, 56 insertions(+), 10 deletions(-)
> 
> [...]
> 
> Sketch for a sanity check:
> 
> > +static int ckpt_read_auxv(struct ckpt_ctx *ctx, struct mm_struct *mm)
> > +{
> > +	int i, ret;
> > +	u64 *buf = kmalloc(CKPT_AT_SZ, GFP_KERNEL);
> > +
> > +	if (!buf)
> > +		return -ENOMEM;
> > +	ret = _ckpt_read_buffer(ctx, buf, CKPT_AT_SZ);
> > +	if (ret < 0) {
> > +		kfree(buf);
> > +		return ret;
> > +	}
> > +
> 
> 	ret = -E2BIG;
> > +	for (i=0; i<AT_VECTOR_SIZE; i++)
> > +		if (buf[i] > (u64) ULONG_MAX)
> 			goto out;
> 
> 	ret = -EINVAL;
> 	for (i=0; i<AT_VECTOR_SIZE; i++)
> 		if (mm->saved_auxv[i] == AT_NULL)
> 			ret = 0;
> 	if (ret < 0)
> 		goto out;

Yup, that would work.

Alternatively, do you think it would be safe to just
always set the last entry to AT_NULL?

> > +
> > +	for (i=0; i<AT_VECTOR_SIZE; i++)
> > +		mm->saved_auxv[i] = buf[i];
> > +
>  out:
> > +	kfree(buf);
> > +	return 0;
> 	       ret;
> 
> [...]
> 
> Oren.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 7/9] cr: checkpoint saved_auxv as u64s
       [not found]             ` <20100209202035.GC29094-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
@ 2010-02-09 20:43               ` Oren Laadan
  0 siblings, 0 replies; 20+ messages in thread
From: Oren Laadan @ 2010-02-09 20:43 UTC (permalink / raw)
  To: Serge E. Hallyn; +Cc: containers-qjLDD68F18O7TbgM5vRIOg



Serge E. Hallyn wrote:
> Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
>>
>> serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
>>> From: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
>>>
>>> unsigned longs are not a good value to checkpoint between
>>> x86-32 and x86-64 32-bit tasks :)
>>>
>>> Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
>>> ---
>>>  checkpoint/checkpoint.c        |    5 +--
>>>  checkpoint/memory.c            |   53 +++++++++++++++++++++++++++++++++++++--
>>>  checkpoint/restart.c           |    6 ++--
>>>  include/linux/checkpoint_hdr.h |    2 +-
>>>  4 files changed, 56 insertions(+), 10 deletions(-)
>> [...]
>>
>> Sketch for a sanity check:
>>
>>> +static int ckpt_read_auxv(struct ckpt_ctx *ctx, struct mm_struct *mm)
>>> +{
>>> +	int i, ret;
>>> +	u64 *buf = kmalloc(CKPT_AT_SZ, GFP_KERNEL);
>>> +
>>> +	if (!buf)
>>> +		return -ENOMEM;
>>> +	ret = _ckpt_read_buffer(ctx, buf, CKPT_AT_SZ);
>>> +	if (ret < 0) {
>>> +		kfree(buf);
>>> +		return ret;
>>> +	}
>>> +
>> 	ret = -E2BIG;
>>> +	for (i=0; i<AT_VECTOR_SIZE; i++)
>>> +		if (buf[i] > (u64) ULONG_MAX)
>> 			goto out;
>>
>> 	ret = -EINVAL;
>> 	for (i=0; i<AT_VECTOR_SIZE; i++)
>> 		if (mm->saved_auxv[i] == AT_NULL)
>> 			ret = 0;
>> 	if (ret < 0)
>> 		goto out;
> 
> Yup, that would work.
> 
> Alternatively, do you think it would be safe to just
> always set the last entry to AT_NULL?

A bit hacky, but should work.
... so I'll do just that :)

Oren.

> 
>>> +
>>> +	for (i=0; i<AT_VECTOR_SIZE; i++)
>>> +		mm->saved_auxv[i] = buf[i];
>>> +
>>  out:
>>> +	kfree(buf);
>>> +	return 0;
>> 	       ret;
>>
>> [...]
>>
>> Oren.
> 

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 0/9] ckpt-v19-rc3 cleanups
       [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
                     ` (8 preceding siblings ...)
  2010-02-09  2:00   ` [PATCH 9/9] mm/mmap.c:do_munmap(): remove unused local vars serue-r/Jw6+rmf7HQT0dZR+AlfA
@ 2010-02-09 22:04   ` Oren Laadan
  9 siblings, 0 replies; 20+ messages in thread
From: Oren Laadan @ 2010-02-09 22:04 UTC (permalink / raw)
  To: serue-r/Jw6+rmf7HQT0dZR+AlfA; +Cc: containers-qjLDD68F18O7TbgM5vRIOg


I applied patches 2,4,5,7,8,9.

Patches 1,3,6 are related to mixed bit-ness restart -> for v20.

Thanks,

Oren.

serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> Sorry, some of these I've sent before, but here is the set I currently
> have on top of ckpt-v19-rc3.  Boy is this painful - there are at least
> still 32->64 or vice-versa problems with: ipc_shm restore, signals
> (I think) and, in 32-bit restore of a x86-64 32-bit image, restore_cpu.
> I'll keep pushing at this tomorrow.
> 
> 

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2010-02-09 22:04 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-09  1:59 [PATCH 0/9] ckpt-v19-rc3 cleanups serue-r/Jw6+rmf7HQT0dZR+AlfA
     [not found] ` <1265680806-13295-1-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-09  1:59   ` [PATCH 1/9] Use CKPT_ARCH_X86_32 for all x86 CKPT_ARCH_IDs serue-r/Jw6+rmf7HQT0dZR+AlfA
     [not found]     ` <1265680806-13295-2-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-09  2:04       ` Serge E. Hallyn
2010-02-09  3:40       ` Oren Laadan
2010-02-09  1:59   ` [PATCH 2/9] restart only same bit-ness serue-r/Jw6+rmf7HQT0dZR+AlfA
2010-02-09  2:00   ` [PATCH 3/9] x86_64: keep __u32s in even groups serue-r/Jw6+rmf7HQT0dZR+AlfA
2010-02-09  2:00   ` [PATCH 4/9] x86_32: add TIF_IA32 to thread flags serue-r/Jw6+rmf7HQT0dZR+AlfA
2010-02-09  2:00   ` [PATCH 5/9] use ckpt_err for architecture mismatch errors serue-r/Jw6+rmf7HQT0dZR+AlfA
     [not found]     ` <1265680806-13295-6-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-09  3:52       ` Oren Laadan
     [not found]         ` <4B70DBF9.30105-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-02-09  3:59           ` Serge E. Hallyn
2010-02-09  2:00   ` [PATCH 6/9] Make AT_VECTOR_SIZE_ARCH 2 for x86-32 serue-r/Jw6+rmf7HQT0dZR+AlfA
     [not found]     ` <1265680806-13295-7-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-09  3:42       ` Oren Laadan
     [not found]         ` <4B70D98F.20303-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-02-09  3:58           ` Serge E. Hallyn
2010-02-09  2:00   ` [PATCH 7/9] cr: checkpoint saved_auxv as u64s serue-r/Jw6+rmf7HQT0dZR+AlfA
     [not found]     ` <1265680806-13295-8-git-send-email-serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-09 17:20       ` Oren Laadan
     [not found]         ` <4B71994E.10105-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-02-09 20:20           ` Serge E. Hallyn
     [not found]             ` <20100209202035.GC29094-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-09 20:43               ` Oren Laadan
2010-02-09  2:00   ` [PATCH 8/9] fix potential use-before-set ret in arch/x86/vdso/vma.c serue-r/Jw6+rmf7HQT0dZR+AlfA
2010-02-09  2:00   ` [PATCH 9/9] mm/mmap.c:do_munmap(): remove unused local vars serue-r/Jw6+rmf7HQT0dZR+AlfA
2010-02-09 22:04   ` [PATCH 0/9] ckpt-v19-rc3 cleanups Oren Laadan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.