The @shmid is unsigned long and may overflow the integer so we loose
the bijective mapping between image names and their ids. Thus use
unsigned long here.

https://jira.sw.ru/browse/PSBM-75112

Signed-off-by: Cyrill Gorcunov <gorcu...@virtuozzo.com>
---
 criu/cr-dedup.c        | 12 ++++++------
 criu/image-desc.c      |  4 ++--
 criu/include/pagemap.h |  4 ++--
 criu/page-xfer.c       |  2 +-
 criu/pagemap.c         | 14 +++++++-------
 5 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/criu/cr-dedup.c b/criu/cr-dedup.c
index d103ddf..93af9be 100644
--- a/criu/cr-dedup.c
+++ b/criu/cr-dedup.c
@@ -8,7 +8,7 @@
 #include "pagemap.h"
 #include "restorer.h"
 
-static int cr_dedup_one_pagemap(int id, int flags);
+static int cr_dedup_one_pagemap(unsigned long id, int flags);
 
 int cr_dedup(void)
 {
@@ -36,17 +36,17 @@ int cr_dedup(void)
                        break;
                }
 
-               ret = sscanf(ent->d_name, "pagemap-%d.img", &id);
+               ret = sscanf(ent->d_name, "pagemap-%lu.img", &id);
                if (ret == 1) {
-                       pr_info("pid=%d\n", id);
+                       pr_info("pid=%lu\n", id);
                        ret = cr_dedup_one_pagemap(id, PR_TASK);
                        if (ret < 0)
                                break;
                }
 
-               ret = sscanf(ent->d_name, "pagemap-shmem-%d.img", &id);
+               ret = sscanf(ent->d_name, "pagemap-shmem-%lu.img", &id);
                if (ret == 1) {
-                       pr_info("shmid=%d\n", id);
+                       pr_info("shmid=%lu\n", id);
                        ret = cr_dedup_one_pagemap(id, PR_SHMEM);
                        if (ret < 0)
                                break;
@@ -67,7 +67,7 @@ int cr_dedup(void)
        return 0;
 }
 
-static int cr_dedup_one_pagemap(int id, int flags)
+static int cr_dedup_one_pagemap(unsigned long id, int flags)
 {
        int ret;
        struct page_read pr;
diff --git a/criu/image-desc.c b/criu/image-desc.c
index 7fedf1a..58e8bf7 100644
--- a/criu/image-desc.c
+++ b/criu/image-desc.c
@@ -27,8 +27,8 @@
 struct cr_fd_desc_tmpl imgset_template[CR_FD_MAX] = {
        FD_ENTRY(INVENTORY,     "inventory"),
        FD_ENTRY(FDINFO,        "fdinfo-%d"),
-       FD_ENTRY(PAGEMAP,       "pagemap-%ld"),
-       FD_ENTRY(SHMEM_PAGEMAP, "pagemap-shmem-%ld"),
+       FD_ENTRY(PAGEMAP,       "pagemap-%lu"),
+       FD_ENTRY(SHMEM_PAGEMAP, "pagemap-shmem-%lu"),
        FD_ENTRY(REG_FILES,     "reg-files"),
        FD_ENTRY(EXT_FILES,     "ext-files"),
        FD_ENTRY(NS_FILES,      "ns-files"),
diff --git a/criu/include/pagemap.h b/criu/include/pagemap.h
index b993c47..7ab19d6 100644
--- a/criu/include/pagemap.h
+++ b/criu/include/pagemap.h
@@ -96,8 +96,8 @@ struct page_read {
  *  0 -- no images
  *  1 -- opened
  */
-extern int open_page_read(int pid, struct page_read *, int pr_flags);
-extern int open_page_read_at(int dfd, int pid, struct page_read *pr,
+extern int open_page_read(unsigned long img_id, struct page_read *, int 
pr_flags);
+extern int open_page_read_at(int dfd, unsigned long img_id, struct page_read 
*pr,
                int pr_flags);
 
 struct task_restore_args;
diff --git a/criu/page-xfer.c b/criu/page-xfer.c
index f729334..14cfdbe 100644
--- a/criu/page-xfer.c
+++ b/criu/page-xfer.c
@@ -467,7 +467,7 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct 
page_pipe *pp,
  *      0 - if a parent image doesn't exist
  *     -1 - in error cases
  */
-int check_parent_local_xfer(int fd_type, int id)
+int check_parent_local_xfer(int fd_type, unsigned long id)
 {
        char path[PATH_MAX];
        struct stat st;
diff --git a/criu/pagemap.c b/criu/pagemap.c
index 0292576..6644849 100644
--- a/criu/pagemap.c
+++ b/criu/pagemap.c
@@ -560,7 +560,7 @@ static void reset_pagemap(struct page_read *pr)
                reset_pagemap(pr->parent);
 }
 
-static int try_open_parent(int dfd, int pid, struct page_read *pr, int 
pr_flags)
+static int try_open_parent(int dfd, unsigned long img_id, struct page_read 
*pr, int pr_flags)
 {
        int pfd, ret;
        struct page_read *parent = NULL;
@@ -573,7 +573,7 @@ static int try_open_parent(int dfd, int pid, struct 
page_read *pr, int pr_flags)
        if (!parent)
                goto err_cl;
 
-       ret = open_page_read_at(pfd, pid, parent, pr_flags);
+       ret = open_page_read_at(pfd, img_id, parent, pr_flags);
        if (ret < 0)
                goto err_free;
 
@@ -649,7 +649,7 @@ static int init_pagemaps(struct page_read *pr)
        return -1;
 }
 
-int open_page_read_at(int dfd, int pid, struct page_read *pr, int pr_flags)
+int open_page_read_at(int dfd, unsigned long img_id, struct page_read *pr, int 
pr_flags)
 {
        int flags, i_typ;
        static unsigned ids = 1;
@@ -683,7 +683,7 @@ int open_page_read_at(int dfd, int pid, struct page_read 
*pr, int pr_flags)
        pr->pmes = NULL;
        pr->pieok = false;
 
-       pr->pmi = open_image_at(dfd, i_typ, O_RSTR, (long)pid);
+       pr->pmi = open_image_at(dfd, i_typ, O_RSTR, img_id);
        if (!pr->pmi)
                return -1;
 
@@ -692,7 +692,7 @@ int open_page_read_at(int dfd, int pid, struct page_read 
*pr, int pr_flags)
                return 0;
        }
 
-       if (try_open_parent(dfd, pid, pr, pr_flags)) {
+       if (try_open_parent(dfd, img_id, pr, pr_flags)) {
                close_image(pr->pmi);
                return -1;
        }
@@ -725,7 +725,7 @@ int open_page_read_at(int dfd, int pid, struct page_read 
*pr, int pr_flags)
        return 1;
 }
 
-int open_page_read(int pid, struct page_read *pr, int pr_flags)
+int open_page_read(unsigned long img_id, struct page_read *pr, int pr_flags)
 {
-       return open_page_read_at(get_service_fd(IMG_FD_OFF), pid, pr, pr_flags);
+       return open_page_read_at(get_service_fd(IMG_FD_OFF), img_id, pr, 
pr_flags);
 }
-- 
2.7.5

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to