[Devel] [PATCH RHEL COMMIT] ve: Implement current_user_ns_initial() helper
Konstantin Khorenko
khorenko at virtuozzo.com
Wed Sep 22 14:50:57 MSK 2021
The commit is pushed to "branch-rh9-5.14.vz9.1.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after ark-5.14
------>
commit a22aa5f9b3382ad49e512bd9e66d9d5c7ecdd003
Author: Konstantin Khorenko <khorenko at virtuozzo.com>
Date: Wed Sep 22 14:50:56 2021 +0300
ve: Implement current_user_ns_initial() helper
Add a helper which checks if current user_ns is
the same as ve init_cred's. Will be used in next
patch.
Signed-off-by: Kirill Tkhai <ktkhai at odin.com>
Signed-off-by: Andrei Vagin <avagin at virtuozzo.com>
Signed-off-by: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
(cherry picked from vz8 commit 2fb1d96c8cc6f00dba3dba1f6bec202b2e97b9fb)
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
include/linux/ve.h | 7 +++++++
kernel/ve/ve.c | 18 ++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/include/linux/ve.h b/include/linux/ve.h
index 92daafbd9e44..ba3d1e517152 100644
--- a/include/linux/ve.h
+++ b/include/linux/ve.h
@@ -72,6 +72,8 @@ extern struct cgroup_subsys_state *ve_get_init_css(struct ve_struct *ve, int sub
#define ve_feature_set(ve, f) \
!!((ve)->features & VE_FEATURE_##f)
+extern bool current_user_ns_initial(void);
+
extern struct cgroup *cgroup_get_ve_root1(struct cgroup *cgrp);
#else /* CONFIG_VE */
@@ -83,6 +85,11 @@ static inline void ve_exit_ns(struct pid_namespace *ns) { }
#define ve_feature_set(ve, f) { true; }
+static inline bool current_user_ns_initial(void)
+{
+ return current_user_ns() == init_cred.user_ns;
+}
+
static inline struct cgroup *cgroup_get_ve_root1(struct cgroup *cgrp)
{
return NULL;
diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c
index e9148116a019..ff51f5678a83 100644
--- a/kernel/ve/ve.c
+++ b/kernel/ve/ve.c
@@ -121,6 +121,24 @@ struct ve_struct *get_ve_by_id(envid_t veid)
}
EXPORT_SYMBOL(get_ve_by_id);
+/* Check if current user_ns is initial for current ve */
+bool current_user_ns_initial(void)
+{
+ struct ve_struct *ve = get_exec_env();
+ bool ret = false;
+
+ if (current_user_ns() == &init_user_ns)
+ return true;
+
+ rcu_read_lock();
+ if (ve->ve_ns && ve->init_cred->user_ns == current_user_ns())
+ ret = true;
+ rcu_read_unlock();
+
+ return ret;
+}
+EXPORT_SYMBOL(current_user_ns_initial);
+
int nr_threads_ve(struct ve_struct *ve)
{
return cgroup_task_count(ve->css.cgroup);
More information about the Devel
mailing list