diff --git a/cr-dump.c b/cr-dump.c index c4d62fe73..11b7ed814 100644 --- a/cr-dump.c +++ b/cr-dump.c @@ -164,10 +164,9 @@ static int dump_task_special_files(pid_t pid, struct cr_fdset *cr_fdset) /* Dump /proc/pid/cwd */ params = (struct fd_parms) { - .fd_name = FDINFO_CWD, .id = FD_ID_INVALID, .pid = FD_PID_INVALID, - .type = FDINFO_FD, + .type = FDINFO_CWD, }; fd = open_proc(pid, "cwd"); @@ -179,10 +178,9 @@ static int dump_task_special_files(pid_t pid, struct cr_fdset *cr_fdset) /* Dump /proc/pid/exe */ params = (struct fd_parms) { - .fd_name = FDINFO_EXE, .id = FD_ID_INVALID, .pid = FD_PID_INVALID, - .type = FDINFO_FD, + .type = FDINFO_EXE, }; fd = open_proc(pid, "exe"); @@ -358,7 +356,7 @@ static int dump_one_fd(pid_t pid, int pid_fd_dir, char *d_name, struct cr_fdset (S_ISCHR(fd_stat.st_mode) && major(fd_stat.st_rdev) == MEM_MAJOR)) { p.id = MAKE_FD_GENID(fd_stat.st_dev, fd_stat.st_ino, p.pos); - p.type = FDINFO_FD; + p.type = FDINFO_REG; return dump_one_reg_file(&p, lfd, cr_fdset, 1); } diff --git a/files.c b/files.c index 4f7504708..773193f7a 100644 --- a/files.c +++ b/files.c @@ -403,7 +403,7 @@ static int open_fdinfo(int pid, struct fdinfo_entry *fe, int *fdinfo_fd, int sta pr_info("\t%d: Got fd for %lx type %d namelen %d users %d\n", pid, (unsigned long)fe->addr, fe->type, fe->len, fi->users); - BUG_ON(fe->type != FDINFO_FD); + BUG_ON(fe->type != FDINFO_REG); switch (state) { @@ -431,11 +431,12 @@ static int open_special_fdinfo(int pid, struct fdinfo_entry *fe, if (fe->type == FDINFO_MAP) return open_fmap(pid, fe, fdinfo_fd); - if (fe->addr == FDINFO_CWD) + if (fe->type == FDINFO_CWD) return restore_cwd(fe, fdinfo_fd); - if (fe->addr == FDINFO_EXE) + if (fe->type == FDINFO_EXE) return restore_exe_early(fe, fdinfo_fd); + pr_info("%d: fe->type: %d\n", pid, fe->type); BUG_ON(1); return -1; } diff --git a/include/image.h b/include/image.h index 5d9752a80..284744084 100644 --- a/include/image.h +++ b/include/image.h @@ -29,12 +29,12 @@ #define PIPEFS_MAGIC 0x50495045 -#define FDINFO_FD 1 +#define FDINFO_REG 1 #define FDINFO_MAP 2 /* Specials */ -#define FDINFO_CWD (-1ULL) -#define FDINFO_EXE (-2ULL) +#define FDINFO_CWD 3 +#define FDINFO_EXE 4 #define PAGE_IMAGE_SIZE 4096 #define PAGE_RSS 1 @@ -51,9 +51,9 @@ struct fdinfo_entry { } __packed; #define fd_is_special(fe) \ - (((fe)->type != FDINFO_FD) || \ - ((fe)->addr == FDINFO_CWD) || \ - ((fe)->addr == FDINFO_EXE)) + (((fe)->type == FDINFO_MAP) || \ + ((fe)->type == FDINFO_CWD) || \ + ((fe)->type == FDINFO_EXE)) struct shmem_entry { u64 start; diff --git a/restorer.c b/restorer.c index 55e6621fd..9f24e79b3 100644 --- a/restorer.c +++ b/restorer.c @@ -248,7 +248,7 @@ static long restore_self_exe_late(struct task_restore_core_args *args) goto err; } - if (fe.type == FDINFO_FD && fe.addr == FDINFO_EXE) + if (fe.type == FDINFO_EXE) break; if (fe.len)