We may have a case, when VE is dead, but there are some users of it,
overlayfs superblock for example.

This user may want to use VE creds, so we need to keep ve->init_cred alive.
Drop creds in ve_destroy. We need to drop ve_nsproxy early because
ploop waits for refcount going to zero, dropping ve_nsproxy in destroy
causes CT suspend/resume hangs.

https://virtuozzo.atlassian.net/browse/VSTOR-142405
Signed-off-by: Vladimir Riabchun <[email protected]>
---
 kernel/ve/ve.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c
index b3988a8d590f..1e0c092f080e 100644
--- a/kernel/ve/ve.c
+++ b/kernel/ve/ve.c
@@ -378,7 +378,10 @@ static void ve_drop_context(struct ve_struct *ve)
        rcu_assign_pointer(ve->ve_nsproxy, NULL);
        synchronize_rcu();
        put_nsproxy(ve_nsproxy);
+}
 
+static void ve_drop_cred(struct ve_struct *ve)
+{
        put_cred(ve->init_cred);
        ve->init_cred = NULL;
 }
@@ -929,6 +932,7 @@ static void ve_destroy(struct cgroup_subsys_state *css)
 {
        struct ve_struct *ve = css_to_ve(css);
 
+       ve_drop_cred(ve);
        free_ve_devmnts(ve);
 
        kmapset_unlink(&ve->sysfs_perms_key, &sysfs_ve_perms_set);

-- 
2.52.0

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to