mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-17 16:47:50 +00:00
fs: Support umask dump/restore
This one is bound to task's fs info (with cwd and root) thus put it in the fs.img file. Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
f787f922e2
commit
d703f8260e
7 changed files with 16 additions and 2 deletions
|
|
@ -47,6 +47,7 @@ __NR_mkdir 83 sys_mkdir (const char *name, int mode)
|
|||
__NR_rmdir 84 sys_rmdir (const char *name)
|
||||
__NR_unlink 87 sys_unlink (char *pathname)
|
||||
__NR_readlink 89 sys_readlink (const char *path, char *buf, int bufsize)
|
||||
__NR_umask 95 sys_umask (int mask)
|
||||
__NR_getgroups 115 sys_getgroups (int gsize, unsigned int *groups)
|
||||
__NR_setresuid 117 sys_setresuid (int uid, int euid, int suid)
|
||||
__NR_setresgid 119 sys_setresgid (int gid, int egid, int sgid)
|
||||
|
|
|
|||
|
|
@ -393,12 +393,15 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int dump_task_fs(pid_t pid, struct cr_fdset *fdset)
|
||||
static int dump_task_fs(pid_t pid, struct parasite_dump_misc *misc, struct cr_fdset *fdset)
|
||||
{
|
||||
struct fd_parms p = FD_PARMS_INIT;
|
||||
FsEntry fe = FS_ENTRY__INIT;
|
||||
int fd, ret;
|
||||
|
||||
fe.has_umask = true;
|
||||
fe.umask = misc->umask;
|
||||
|
||||
fd = open_proc(pid, "cwd");
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
|
@ -1460,7 +1463,7 @@ static int dump_one_task(struct pstree_item *item)
|
|||
goto err;
|
||||
}
|
||||
|
||||
ret = dump_task_fs(pid, cr_fdset);
|
||||
ret = dump_task_fs(pid, &misc, cr_fdset);
|
||||
if (ret) {
|
||||
pr_err("Dump fs (pid: %d) failed with %d\n", pid, ret);
|
||||
goto err;
|
||||
|
|
|
|||
5
files.c
5
files.c
|
|
@ -599,6 +599,11 @@ int prepare_fs(int pid)
|
|||
* by path thus exposing this (yet unclean) logic here.
|
||||
*/
|
||||
|
||||
if (fe->has_umask) {
|
||||
pr_info("Restoring umask to %o\n", fe->umask);
|
||||
umask(fe->umask);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
close:
|
||||
close_safe(&cwd);
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ struct parasite_dump_misc {
|
|||
u32 sid;
|
||||
u32 pgid;
|
||||
u32 tls;
|
||||
u32 umask;
|
||||
};
|
||||
|
||||
#define PARASITE_MAX_GROUPS (PAGE_SIZE / sizeof(unsigned int))
|
||||
|
|
|
|||
|
|
@ -290,6 +290,8 @@ static int dump_misc(struct parasite_dump_misc *args)
|
|||
args->sid = sys_getsid();
|
||||
args->pgid = sys_getpgid(0);
|
||||
args->tls = arch_get_tls();
|
||||
args->umask = sys_umask(0);
|
||||
sys_umask(args->umask); /* never fails */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
message fs_entry {
|
||||
required uint32 cwd_id = 1;
|
||||
required uint32 root_id = 2;
|
||||
optional uint32 umask = 3;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ static/xids00
|
|||
static/groups
|
||||
static/pthread00
|
||||
static/pthread01
|
||||
static/umask00
|
||||
streaming/pipe_loop00
|
||||
streaming/pipe_shared00
|
||||
transition/file_read
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue