summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vserver-sources/2.1.1-r1/4412_vs2.1.1-private-fix01.patch')
-rw-r--r--vserver-sources/2.1.1-r1/4412_vs2.1.1-private-fix01.patch81
1 files changed, 81 insertions, 0 deletions
diff --git a/vserver-sources/2.1.1-r1/4412_vs2.1.1-private-fix01.patch b/vserver-sources/2.1.1-r1/4412_vs2.1.1-private-fix01.patch
new file mode 100644
index 0000000..2ce9262
--- /dev/null
+++ b/vserver-sources/2.1.1-r1/4412_vs2.1.1-private-fix01.patch
@@ -0,0 +1,81 @@
+Index: linux-2.6.18/include/linux/vserver/network.h
+===================================================================
+--- linux-2.6.18.orig/include/linux/vserver/network.h
++++ linux-2.6.18/include/linux/vserver/network.h
+@@ -14,6 +14,7 @@
+ /* network flags */
+
+ #define NXF_INFO_LOCK 0x00000001
++#define NXF_INFO_PRIVATE 0x00000008
+
+ #define NXF_STATE_SETUP (1ULL<<32)
+ #define NXF_STATE_ADMIN (1ULL<<34)
+Index: linux-2.6.18/kernel/vserver/context.c
+===================================================================
+--- linux-2.6.18.orig/kernel/vserver/context.c
++++ linux-2.6.18/kernel/vserver/context.c
+@@ -585,7 +585,7 @@ int vx_migrate_user(struct task_struct *
+ if (!p || !vxi)
+ BUG();
+
+- if (vx_info_flags(vxi, VXF_INFO_LOCK, 0))
++ if (vx_info_flags(vxi, VXF_INFO_PRIVATE, 0))
+ return -EACCES;
+
+ new_user = alloc_uid(vxi->vx_id, p->uid);
+@@ -650,13 +650,17 @@ int vx_migrate_task(struct task_struct *
+ "vx_migrate_task(%p,%p[#%d.%d])", p, vxi,
+ vxi->vx_id, atomic_read(&vxi->vx_usecnt));
+
+- if (vx_info_flags(vxi, VXF_INFO_LOCK, 0))
++ if (vx_info_flags(vxi, VXF_INFO_PRIVATE, 0))
+ return -EACCES;
+
+ old_vxi = task_get_vx_info(p);
+ if (old_vxi == vxi)
+ goto out;
+
++ ret =-EACCES;
++ if (vx_info_flags(old_vxi, VXF_INFO_LOCK, 0))
++ goto out;
++
+ if (!(ret = vx_migrate_user(p, vxi))) {
+ int openfd;
+
+Index: linux-2.6.18/kernel/vserver/namespace.c
+===================================================================
+--- linux-2.6.18.orig/kernel/vserver/namespace.c
++++ linux-2.6.18/kernel/vserver/namespace.c
+@@ -33,7 +33,7 @@ int vx_enter_namespace(struct vx_info *v
+ struct fs_struct *old_fs, *fs;
+ struct namespace *old_ns;
+
+- if (vx_info_flags(vxi, VXF_INFO_LOCK, 0))
++ if (vx_info_flags(vxi, VXF_INFO_PRIVATE, 0))
+ return -EACCES;
+ if (!vxi->vx_namespace)
+ return -EINVAL;
+Index: linux-2.6.18/kernel/vserver/network.c
+===================================================================
+--- linux-2.6.18.orig/kernel/vserver/network.c
++++ linux-2.6.18/kernel/vserver/network.c
+@@ -387,7 +387,7 @@ int nx_migrate_task(struct task_struct *
+ atomic_read(&nxi->nx_usecnt),
+ atomic_read(&nxi->nx_tasks));
+
+- if (nx_info_flags(nxi, NXF_INFO_LOCK, 0))
++ if (nx_info_flags(nxi, NXF_INFO_PRIVATE, 0))
+ return -EACCES;
+
+ /* maybe disallow this completely? */
+@@ -395,6 +395,10 @@ int nx_migrate_task(struct task_struct *
+ if (old_nxi == nxi)
+ goto out;
+
++ ret =-EACCES;
++ if (nx_info_flags(old_nxi, NXF_INFO_LOCK, 0))
++ goto out;
++
+ task_lock(p);
+ if (old_nxi)
+ clr_nx_info(&p->nx_info);