[CRIU] [PATCH] proc_parse: Borrow vmi iif there is file referenced
Cyrill Gorcunov
gorcunov at openvz.org
Thu Mar 6 00:19:06 PST 2014
Otherwise we migh propagate previous vfi status
to vmas which actually don't match.
| (00.005471) 0x2b79227d6000-0x2b79227d8000 (8K) prot 0x5 flags 0x22 off 0 reg vdso ap shmid: 0
| (00.005473) 0x2b79227d8000-0x2b79227da000 (8K) prot 0x3 flags 0x22 off 0 reg vdso ap shmid: 0
| (00.005475) 0x2b79227f1000-0x2b79227f2000 (4K) prot 0x3 flags 0x22 off 0 reg vdso ap shmid: 0
| (00.005476) 0x2b79227f2000-0x2b79227f4000 (8K) prot 0x3 flags 0x22 off 0 reg vdso ap shmid: 0
Reported-by: Pavel Tikhomirov <snorcht at gmail.com>
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
proc_parse.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/proc_parse.c b/proc_parse.c
index 3a7b5ebd21eb..22248f5d6f18 100644
--- a/proc_parse.c
+++ b/proc_parse.c
@@ -172,14 +172,16 @@ static int vma_get_mapfile(struct vma_area *vma, DIR *mfd,
if (prev_vfi->vma && vfi_equal(vfi, prev_vfi)) {
struct vma_area *prev = prev_vfi->vma;
- pr_debug("vma %"PRIx64" borrows vfi from previous %"PRIx64"\n",
- vma->e->start, prev->e->start);
- vma->vm_file_fd = prev->vm_file_fd;
- if (prev->e->status & VMA_AREA_SOCKET)
- vma->e->status |= VMA_AREA_SOCKET | VMA_AREA_REGULAR;
- vma->file_borrowed = true;
-
- return 0;
+ if (prev->vm_file_fd >= 0) {
+ pr_debug("vma %"PRIx64" borrows vfi from previous %"PRIx64"\n",
+ vma->e->start, prev->e->start);
+ vma->vm_file_fd = prev->vm_file_fd;
+ if (prev->e->status & VMA_AREA_SOCKET)
+ vma->e->status |= VMA_AREA_SOCKET | VMA_AREA_REGULAR;
+ vma->file_borrowed = true;
+
+ return 0;
+ }
}
/* Figure out if it's file mapping */
--
1.8.3.1
More information about the CRIU
mailing list