From 4ba34695e457a18c55bfb18693aff73c2b87a57a Mon Sep 17 00:00:00 2001 From: Yuanhan Liu Date: Wed, 21 Oct 2009 17:13:35 +0800 Subject: [PATCH] commit Signed-off-by: Yuanhan Liu --- src/dump.c | 4 ++-- src/restore.c | 28 ++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/dump.c b/src/dump.c index c70d850..7a8c75d 100644 --- a/src/dump.c +++ b/src/dump.c @@ -172,7 +172,7 @@ void dump_segments(struct file *file, struct mm_struct *mm, int memleft) pth.dentry = vm->vm_file->f_dentry; line = d_path(&pth, buffer, PAGE_SIZE); buffer[PAGE_SIZE-1] = 0; - seg.shared = 0; + seg.shared = 1; ckpt_strncpy(seg.filename, line, CKPT_MAX_FILENAME); } } @@ -292,7 +292,7 @@ void dump_vm_areas(struct file *file, struct task_struct *p) print_flags(vm->vm_flags); printk("\n"); #endif - //if (should_dump(vm->vm_flags) && vm->vm_file) + if (should_dump(vm->vm_flags) && vm->vm_file) dump_vm_area(file, p, vm); } } diff --git a/src/restore.c b/src/restore.c index 44c151b..4a8ce37 100644 --- a/src/restore.c +++ b/src/restore.c @@ -126,9 +126,9 @@ unsigned long restore_vm_areas(struct file *file, int count, int from) mmap_prot = seg.flags & 7; mmap_flags = get_mmap_flags(seg.flags); - //if (!seg.shared) { - //mmap_flags &= ~VM_EXECUTABLE; - //} + if (!seg.shared) { + mmap_flags &= ~VM_EXECUTABLE; + } if (!seg.shared) { int growsdown = mmap_flags & MAP_GROWSDOWN; @@ -141,13 +141,32 @@ unsigned long restore_vm_areas(struct file *file, int count, int from) mmap_flags | MAP_FIXED, from); if (growsdown) mmap_flags |= MAP_GROWSDOWN; + + from += size; } else { +#if 1 struct file *mfile; + mmap_flags &= ~ MAP_DENYWRITE; mfile = open_private_file(0, seg.filename, O_RDONLY, mmap_prot & PROT_WRITE ?3:1); ret = do_mmap(mfile, seg.vm_start, size, mmap_prot, mmap_flags | MAP_FIXED, seg.pgoff); +#else + + int growsdown = mmap_flags & MAP_GROWSDOWN; + + mmap_flags &= ~ MAP_DENYWRITE; + if (growsdown) + mmap_flags &= ~MAP_GROWSDOWN; + + ret = do_mmap(file, seg.vm_start, size, mmap_prot, + mmap_flags | MAP_FIXED, from); + if (growsdown) + mmap_flags |= MAP_GROWSDOWN; + + from += size; +#endif } if (ret != seg.vm_start) { @@ -159,9 +178,6 @@ unsigned long restore_vm_areas(struct file *file, int count, int from) } else { printk("file mapped successfuly at: %p\n", (void *)ret); } - - - from += size; } return from; -- 2.11.4.GIT