--- linux-2.6.19.2-vs2.2.0-rc8.6.1/kernel/vserver/context.c 2007-01-26 02:13:49 +0100 +++ linux-2.6.19.2-vs2.2.0-rc8.6.1/kernel/vserver/context.c 2007-01-26 02:13:49 +0100 @@ -665,6 +665,9 @@ !vx_info_flags(vxi, VXF_STATE_SETUP, 0)) return -EACCES; + if (vx_info_state(vxi, VXS_SHUTDOWN)) + return -EFAULT; + old_vxi = task_get_vx_info(p); if (old_vxi == vxi) goto out; @@ -903,19 +906,20 @@ ret = -ENOEXEC; if (vs_state_change(new_vxi, VSC_STARTUP)) - goto out_unhash; + goto out_err; + ret = vx_migrate_task(current, new_vxi, (!data)); if (!ret) { /* return context id on success */ ret = new_vxi->vx_id; goto out; } -out_unhash: +out_err: /* prepare for context disposal */ new_vxi->vx_state |= VXS_SHUTDOWN; + new_vxi->vx_flags &= ~VXF_PERSISTENT; if ((vc_data.flagword & VXF_PERSISTENT)) vx_clear_persistent(new_vxi); - __unhash_vx_info(new_vxi); out: put_vx_info(new_vxi); return ret; --- linux-2.6.19.2-vs2.2.0-rc8.6.1/kernel/vserver/network.c 2007-01-26 01:58:15 +0100 +++ linux-2.6.19.2-vs2.2.0-rc8.6.1/kernel/vserver/network.c 2007-01-26 01:58:15 +0100 @@ -403,6 +403,9 @@ !nx_info_flags(nxi, NXF_STATE_SETUP, 0)) return -EACCES; + if (nx_info_state(nxi, NXS_SHUTDOWN)) + return -EFAULT; + /* maybe disallow this completely? */ old_nxi = task_get_nx_info(p); if (old_nxi == nxi) @@ -615,19 +618,20 @@ ret = -ENOEXEC; if (vs_net_change(new_nxi, VSC_NETUP)) - goto out_unhash; + goto out_err; + ret = nx_migrate_task(current, new_nxi); if (!ret) { /* return context id on success */ ret = new_nxi->nx_id; goto out; } -out_unhash: +out_err: /* prepare for context disposal */ new_nxi->nx_state |= NXS_SHUTDOWN; + new_nxi->nx_flags &= NXF_PERSISTENT; if ((vc_data.flagword & NXF_PERSISTENT)) nx_clear_persistent(new_nxi); - __unhash_nx_info(new_nxi); out: put_nx_info(new_nxi); return ret;