mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-01-23 02:14:37 +00:00
criu/mem: dump: skip MADV_GUARD pages content dump
1. get info about MADV_GUARD_INSTALL-protected pages with help of pagemap by looking for PME_GUARD_REGION flag if /proc/<pid>/pagemap is used or by looking for PAGE_IS_GUARD flag if ioctl(PAGEMAP_SCAN) is used 2. skip those pages Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
This commit is contained in:
parent
5843cbf975
commit
cc047d595f
2 changed files with 11 additions and 0 deletions
|
|
@ -35,6 +35,7 @@ extern int parasite_dump_pages_seized(struct pstree_item *item, struct vm_area_l
|
|||
#define PME_PRESENT (1ULL << 63)
|
||||
#define PME_SWAP (1ULL << 62)
|
||||
#define PME_FILE (1ULL << 61)
|
||||
#define PME_GUARD_REGION (1ULL << 58)
|
||||
#define PME_SOFT_DIRTY (1ULL << 55)
|
||||
#define PME_PSHIFT_BITS (6)
|
||||
#define PME_STATUS_BITS (3)
|
||||
|
|
|
|||
10
criu/mem.c
10
criu/mem.c
|
|
@ -143,12 +143,18 @@ int should_dump_page(pmc_t *pmc, VmaEntry *vmae, u64 vaddr, struct page_info *pa
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (pmc->regs[pmc->regs_idx].categories & PAGE_IS_GUARD)
|
||||
goto skip_guard_page;
|
||||
|
||||
page_info->softdirty = pmc->regs[pmc->regs_idx].categories & PAGE_IS_SOFT_DIRTY;
|
||||
page_info->next = vaddr;
|
||||
return 0;
|
||||
} else {
|
||||
u64 pme = pmc->map[PAGE_PFN(vaddr - pmc->start)];
|
||||
|
||||
if (pme & PME_GUARD_REGION)
|
||||
goto skip_guard_page;
|
||||
|
||||
/*
|
||||
* Optimisation for private mapping pages, that haven't
|
||||
* yet being COW-ed
|
||||
|
|
@ -173,6 +179,10 @@ err:
|
|||
"%#016" PRIx64 "-%#016" PRIx64 " vaddr=%#016" PRIx64 "\n",
|
||||
vmae->start, vmae->end, vaddr);
|
||||
return -1;
|
||||
|
||||
skip_guard_page:
|
||||
page_info->next = vaddr + PAGE_SIZE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool page_is_zero(u64 pme)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue