diff options
| -rw-r--r-- | fs/namespace.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index 4d31f73e2561..7bdf7907413f 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
| @@ -1886,8 +1886,14 @@ static int do_add_mount(struct mount *newmnt, struct path *path, int mnt_flags) | |||
| 1886 | return err; | 1886 | return err; |
| 1887 | 1887 | ||
| 1888 | err = -EINVAL; | 1888 | err = -EINVAL; |
| 1889 | if (!(mnt_flags & MNT_SHRINKABLE) && !check_mnt(real_mount(path->mnt))) | 1889 | if (unlikely(!check_mnt(real_mount(path->mnt)))) { |
| 1890 | goto unlock; | 1890 | /* that's acceptable only for automounts done in private ns */ |
| 1891 | if (!(mnt_flags & MNT_SHRINKABLE)) | ||
| 1892 | goto unlock; | ||
| 1893 | /* ... and for those we'd better have mountpoint still alive */ | ||
| 1894 | if (!real_mount(path->mnt)->mnt_ns) | ||
| 1895 | goto unlock; | ||
| 1896 | } | ||
| 1891 | 1897 | ||
| 1892 | /* Refuse the same filesystem on the same mount point */ | 1898 | /* Refuse the same filesystem on the same mount point */ |
| 1893 | err = -EBUSY; | 1899 | err = -EBUSY; |
