51 lines
1.7 KiB
Diff
51 lines
1.7 KiB
Diff
From: Miklos Szeredi <mszeredi@suse.cz>
|
|
Date: Mon, 22 Jun 2015 13:53:48 +0200
|
|
Subject: ovl: don't traverse automount points
|
|
Origin: https://git.kernel.org/linus/a6f15d9a756571babbb2b2cd4fdd1b64a5de232b
|
|
Bug-Debian: https://bugs.debian.org/786925
|
|
|
|
NFS and other distributed filesystems may place automount points in the
|
|
tree. Previoulsy overlayfs refused to mount such filesystems types (based
|
|
on the existence of the .d_automount callback), even if the actual export
|
|
didn't have any automount points.
|
|
|
|
It cannot be determined in advance whether the filesystem has automount
|
|
points or not. The solution is to allow fs with .d_automount but refuse to
|
|
traverse any automount points encountered.
|
|
|
|
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
|
|
---
|
|
fs/overlayfs/super.c | 8 ++++++--
|
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
|
|
index bf8537c..de9d2ee 100644
|
|
--- a/fs/overlayfs/super.c
|
|
+++ b/fs/overlayfs/super.c
|
|
@@ -303,6 +303,10 @@ static inline struct dentry *ovl_lookup_real(struct dentry *dir,
|
|
} else if (!dentry->d_inode) {
|
|
dput(dentry);
|
|
dentry = NULL;
|
|
+ } else if (dentry->d_flags & DCACHE_MANAGED_DENTRY) {
|
|
+ dput(dentry);
|
|
+ /* Don't support traversing automounts */
|
|
+ dentry = ERR_PTR(-EREMOTE);
|
|
}
|
|
return dentry;
|
|
}
|
|
@@ -700,12 +704,12 @@ static bool ovl_is_allowed_fs_type(struct dentry *root)
|
|
|
|
/*
|
|
* We don't support:
|
|
- * - automount filesystems
|
|
+ * - autofs
|
|
* - filesystems with revalidate (FIXME for lower layer)
|
|
* - filesystems with case insensitive names
|
|
*/
|
|
if (dop &&
|
|
- (dop->d_manage || dop->d_automount ||
|
|
+ (dop->d_manage ||
|
|
dop->d_revalidate || dop->d_weak_revalidate ||
|
|
dop->d_compare || dop->d_hash)) {
|
|
return false;
|