| From 87243deb88671f70def4c52dfa7ca7830707bd31 Mon Sep 17 00:00:00 2001 |
| From: Seth Forshee <seth.forshee@canonical.com> |
| Date: Wed, 9 Mar 2016 09:18:07 -0600 |
| Subject: debugfs: Make automount point inodes permanently empty |
| |
| From: Seth Forshee <seth.forshee@canonical.com> |
| |
| commit 87243deb88671f70def4c52dfa7ca7830707bd31 upstream. |
| |
| Starting with 4.1 the tracing subsystem has its own filesystem |
| which is automounted in the tracing subdirectory of debugfs. |
| Prior to this debugfs could be bind mounted in a cloned mount |
| namespace, but if tracefs has been mounted under debugfs this |
| now fails because there is a locked child mount. This creates |
| a regression for container software which bind mounts debugfs |
| to satisfy the assumption of some userspace software. |
| |
| In other pseudo filesystems such as proc and sysfs we're already |
| creating mountpoints like this in such a way that no dirents can |
| be created in the directories, allowing them to be exceptions to |
| some MNT_LOCKED tests. In fact we're already do this for the |
| tracefs mountpoint in sysfs. |
| |
| Do the same in debugfs_create_automount(), since the intention |
| here is clearly to create a mountpoint. This fixes the regression, |
| as locked child mounts on permanently empty directories do not |
| cause a bind mount to fail. |
| |
| Signed-off-by: Seth Forshee <seth.forshee@canonical.com> |
| Acked-by: Serge Hallyn <serge.hallyn@canonical.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/debugfs/inode.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/debugfs/inode.c |
| +++ b/fs/debugfs/inode.c |
| @@ -457,7 +457,7 @@ struct dentry *debugfs_create_automount( |
| if (unlikely(!inode)) |
| return failed_creating(dentry); |
| |
| - inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO; |
| + make_empty_dir_inode(inode); |
| inode->i_flags |= S_AUTOMOUNT; |
| inode->i_private = data; |
| dentry->d_fsdata = (void *)f; |