[CRIU] [PATCH v2] page-read: fix open_page_read usage

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Tue Jun 28 08:48:55 PDT 2016


1. Fix uninitialized use of pr in cr_dedup_one_pagemap and get_page:
https://github.com/xemul/criu/issues/178
2. In ud_open, close pr in case of error returned from find_vmas->
collect_uffd_pages as we free lpi with lpi->pr open; so need check in
lpi_fini if uffd is >0 before close

v2:rebase to new criu-dev
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
 criu/cr-dedup.c | 6 ++----
 criu/uffd.c     | 4 ++--
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/criu/cr-dedup.c b/criu/cr-dedup.c
index 538f650..ca5a930 100644
--- a/criu/cr-dedup.c
+++ b/criu/cr-dedup.c
@@ -66,10 +66,8 @@ static int cr_dedup_one_pagemap(int pid)
 	struct iovec iov;
 
 	ret = open_page_read(pid, &pr, PR_TASK | PR_MOD);
-	if (ret <= 0) {
-		ret = -1;
-		goto exit;
-	}
+	if (ret <= 0)
+		return -1;
 
 	prp = pr.parent;
 	if (!prp)
diff --git a/criu/uffd.c b/criu/uffd.c
index 1e0a57a..6c9b141 100644
--- a/criu/uffd.c
+++ b/criu/uffd.c
@@ -76,7 +76,7 @@ static struct lazy_pages_info *lpi_init(void)
 
 static void lpi_fini(struct lazy_pages_info *lpi)
 {
-	if (lpi->uffd)
+	if (lpi->uffd > 0)
 		close(lpi->uffd);
 	if (lpi->pr.close)
 		lpi->pr.close(&lpi->pr);
@@ -323,7 +323,7 @@ static struct lazy_pages_info *ud_open(int listen, struct sockaddr_un *saddr)
 	return lpi;
 
 out:
-	free(lpi);
+	lpi_fini(lpi);
 	close_safe(&client);
 	return NULL;
 }
-- 
2.5.5



More information about the CRIU mailing list