[CRIU] [PATCH 02/14]v3 page-read: add print error in case of bad or corrupted image

Tikhomirov Pavel snorcht at gmail.com
Tue Dec 17 07:27:01 PST 2013


1. add it instead of BUG_ON
we should print error if warn is assigned to true
2. correct use of read_pagemap_page_from_parent, provide warn = true

Signed-off-by: Tikhomirov Pavel <snorcht at gmail.com>
---
 page-read.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/page-read.c b/page-read.c
index 60f8e65..dede2dd 100644
--- a/page-read.c
+++ b/page-read.c
@@ -83,7 +83,7 @@ static void skip_pagemap_pages(struct page_read *pr, unsigned long len)
 	pr->cvaddr += len;
 }
 
-static int read_pagemap_page_from_parent(struct page_read *pr, unsigned long vaddr, void *buf)
+static int read_pagemap_page_from_parent(struct page_read *pr, unsigned long vaddr, void *buf, bool warn)
 {
 	int ret;
 	struct iovec iov;
@@ -96,7 +96,12 @@ static int read_pagemap_page_from_parent(struct page_read *pr, unsigned long vad
 	while (1) {
 		unsigned long iov_end;
 
-		BUG_ON(vaddr < pr->cvaddr);
+		if (vaddr < pr->cvaddr) {
+			if (warn) /* Print error if flag is set */
+				pr_err("Missing %lu in parent pagemap, current iov: base=%lu,len=%lu\n",
+					vaddr, (unsigned long)iov.iov_base, iov.iov_len);
+			return -1;
+		}
 		iov_end = (unsigned long)iov.iov_base + iov.iov_len;
 
 		if (iov_end <= vaddr) {
@@ -121,7 +126,7 @@ static int read_pagemap_page(struct page_read *pr, unsigned long vaddr, void *bu
 
 	if (pr->pe->in_parent) {
 		pr_debug("\tpr%u Read page %lx from parent\n", pr->id, vaddr);
-		ret = read_pagemap_page_from_parent(pr->parent, vaddr, buf);
+		ret = read_pagemap_page_from_parent(pr->parent, vaddr, buf, true);
 		if (ret == -1)
 			return ret;
 	} else {
-- 
1.7.9.5



More information about the CRIU mailing list