From 2e8ddb2db07207dc341c019d17f70888fefdd734 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Fri, 29 May 2015 16:03:00 +0300 Subject: [PATCH] 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: Pavel Emelyanov Acked-by: Andrew Vagin --- util.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/util.c b/util.c index 36162c437..e83f0b81e 100644 --- a/util.c +++ b/util.c @@ -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;