Commit 2e8ddb2d authored by Pavel Emelyanov's avatar Pavel Emelyanov

proc: Don't use parent proc_self_fd cached descriptor

When we call open_proc(PROC_SELF, ...) the /proc/self descriptor is
cached in criu. If the process fork()-s after than and child goes
open_proc(PROC_SELF, ...) then it will get the parent's proc descriptor.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
Acked-by: 's avatarAndrew Vagin <avagin@virtuozzo.com>
parent c9c41ddf
......@@ -174,6 +174,7 @@ int move_img_fd(int *img_fd, int want_fd)
static pid_t open_proc_pid = PROC_NONE;
static int open_proc_fd = -1;
static pid_t open_proc_self_pid;
static int open_proc_self_fd = -1;
static inline void set_proc_self_fd(int fd)
......@@ -182,6 +183,7 @@ static inline void set_proc_self_fd(int fd)
close(open_proc_self_fd);
open_proc_self_fd = fd;
open_proc_self_pid = getpid();
}
static inline void set_proc_pid_fd(int pid, int fd)
......@@ -195,9 +197,13 @@ static inline void set_proc_pid_fd(int pid, int fd)
static inline int get_proc_fd(int pid)
{
if (pid == PROC_SELF)
if (pid == PROC_SELF) {
if (open_proc_self_fd != -1 && open_proc_self_pid != getpid()) {
close(open_proc_self_fd);
open_proc_self_fd = -1;
}
return open_proc_self_fd;
else if (pid == open_proc_pid)
} else if (pid == open_proc_pid)
return open_proc_fd;
else
return -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment