From: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com>

Does:
1) virtualize rpc_pipefs file system
2) virtualize nfs file system
3) allows to mount from CTs initial user ns
4) add VE_FEATURE_NFS check during nfsd mount

Signed-off-by: Stanislav Kinsbursky <skinsbur...@parallels.com>

+++
ve/fs/nfs: NFS containerization - allow to mount NFS in CT root userns

Note: mounting NFS shares in any other nested userns is still
prohibited.

https://jira.sw.ru/browse/PSBM-127234

Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com>
Reviewed-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>

khorenko@: rebase to RHEL8.4 notes:
- the check for VE_FEATURE_NFS feature has been moved from
  nfs_fs_mount() to nfs_init_fs_context()

+++
ve/fs/nfs: NFS containerization - remove excess current_user_ns_initial

Now when we use FS_VE_MOUNT for nfs instead of FS_USERNS_MOUNT we
already have a check that nfs can be mounted only from initial userns.

https://jira.sw.ru/browse/PSBM-131949

Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>

(cherry-picked from vz8 commit 1e0eb912cff3 ("ve/fs/nfs: NFS
containerization"))

Signed-off-by: Nikita Yushchenko <nikita.yushche...@virtuozzo.com>
---
 fs/nfs/fs_context.c   | 11 +++++++++--
 net/sunrpc/rpc_pipe.c |  1 +
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/fs/nfs/fs_context.c b/fs/nfs/fs_context.c
index d95c9a39bc70..3977438b42da 100644
--- a/fs/nfs/fs_context.c
+++ b/fs/nfs/fs_context.c
@@ -17,6 +17,8 @@
 #include <linux/nfs_fs.h>
 #include <linux/nfs_mount.h>
 #include <linux/nfs4_mount.h>
+#include <uapi/linux/vzcalluser.h>
+#include <linux/ve.h>
 #include "nfs.h"
 #include "internal.h"
 
@@ -1486,6 +1488,9 @@ static int nfs_init_fs_context(struct fs_context *fc)
 {
        struct nfs_fs_context *ctx;
 
+       if (!(get_exec_env()->features & VE_FEATURE_NFS))
+               return -ENODEV;
+
        ctx = kzalloc(sizeof(struct nfs_fs_context), GFP_KERNEL);
        if (unlikely(!ctx))
                return -ENOMEM;
@@ -1557,7 +1562,8 @@ struct file_system_type nfs_fs_type = {
        .init_fs_context        = nfs_init_fs_context,
        .parameters             = nfs_fs_parameters,
        .kill_sb                = nfs_kill_super,
-       .fs_flags               = FS_RENAME_DOES_D_MOVE|FS_BINARY_MOUNTDATA,
+       .fs_flags               = FS_RENAME_DOES_D_MOVE|FS_BINARY_MOUNTDATA|
+                                 FS_VIRTUALIZED|FS_VE_MOUNT,
 };
 MODULE_ALIAS_FS("nfs");
 EXPORT_SYMBOL_GPL(nfs_fs_type);
@@ -1569,7 +1575,8 @@ struct file_system_type nfs4_fs_type = {
        .init_fs_context        = nfs_init_fs_context,
        .parameters             = nfs_fs_parameters,
        .kill_sb                = nfs_kill_super,
-       .fs_flags               = FS_RENAME_DOES_D_MOVE|FS_BINARY_MOUNTDATA,
+       .fs_flags               = FS_RENAME_DOES_D_MOVE|FS_BINARY_MOUNTDATA|
+                                 FS_VIRTUALIZED|FS_VE_MOUNT,
 };
 MODULE_ALIAS_FS("nfs4");
 MODULE_ALIAS("nfs4");
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index 09c000d490a1..37d08af10d30 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -1468,6 +1468,7 @@ static struct file_system_type rpc_pipe_fs_type = {
        .name           = "rpc_pipefs",
        .init_fs_context = rpc_init_fs_context,
        .kill_sb        = rpc_kill_sb,
+       .fs_flags       = FS_VIRTUALIZED,
 };
 MODULE_ALIAS_FS("rpc_pipefs");
 MODULE_ALIAS("rpc_pipefs");
-- 
2.30.2

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to