[CRIU] [PATCH 1/3] fsnotify: open mount point relative to a proper root

Andrey Vagin avagin at openvz.org
Fri Aug 29 04:23:15 PDT 2014


From: Andrew Vagin <avagin at openvz.org>

Each mountpoint belongs to a mount namespace, so we need to
find a root of the mount namespace and open mountpoint
ralative to this root.

The same logic is used in get_mark_path().

Signed-off-by: Andrew Vagin <avagin at openvz.org>
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 fsnotify.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/fsnotify.c b/fsnotify.c
index e691b57..09b793d 100644
--- a/fsnotify.c
+++ b/fsnotify.c
@@ -496,6 +496,7 @@ static int restore_one_fanotify(int fd, struct fsnotify_mark_info *mark)
 
 	if (fme->type == MARK_TYPE__MOUNT) {
 		struct mount_info *m;
+		int mntns_root;
 
 		m = lookup_mnt_id(fme->me->mnt_id);
 		if (!m) {
@@ -503,8 +504,17 @@ static int restore_one_fanotify(int fd, struct fsnotify_mark_info *mark)
 			return -1;
 		}
 
+		mntns_root = mntns_get_root_fd(m->nsid);
+
+		target = openat(mntns_root, m->mountpoint, O_PATH);
+		if (target == -1) {
+			pr_perror("Unable to open %s\n", m->mountpoint);
+			goto err;
+		}
+
 		flags |= FAN_MARK_MOUNT;
-		path = m->mountpoint;
+		snprintf(buf, sizeof(buf), "/proc/self/fd/%d", target);
+		path = buf;
 	} else if (fme->type == MARK_TYPE__INODE) {
 		path = get_mark_path("fanotify", mark->remap,
 				     fme->ie->f_handle, fme->ie->i_ino,
-- 
1.9.3



More information about the CRIU mailing list