[CRIU] [PATCH] page-read: add print error in case of bad or corrupted image
Andrew Vagin
avagin at parallels.com
Tue Nov 19 03:26:34 PST 2013
On Tue, Nov 19, 2013 at 02:14:36PM +0400, Tikhomirov Pavel wrote:
> add it instead of BUG_ON
> we should print error if flag isn't assigned
Why do we need this flag? I think we can always print the error message.
> ---
> include/page-read.h | 2 ++
> page-read.c | 13 ++++++++++---
> 2 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/include/page-read.h b/include/page-read.h
> index b19ea69..5ad6325 100644
> --- a/include/page-read.h
> +++ b/include/page-read.h
> @@ -66,4 +66,6 @@ struct page_read {
> };
>
> int open_page_read(int pid, struct page_read *);
> +
> +#define DO_NOT_PRINT_ERROR 1
> #endif
> diff --git a/page-read.c b/page-read.c
> index 3dde366..43f1b2a 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, int flags)
> {
> 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 (!flags & DO_NOT_PRINT_ERROR)
> + 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,9 @@ 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, 0);
> + if (ret == -1)
> + return ret;
> } else {
> pr_debug("\tpr%u Read page %lx from self %lx/%"PRIx64"\n", pr->id,
> vaddr, pr->cvaddr, lseek(pr->fd_pg, 0, SEEK_CUR));
> --
> 1.7.9.5
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list