diff -NurpP linux-2.6.19-vs2.1.1.5/kernel/vserver/switch.c linux-2.6.19-vs2.1.1.5.1/kernel/vserver/switch.c --- linux-2.6.19-vs2.1.1.5/kernel/vserver/switch.c 2006-12-05 18:15:48 +0100 +++ linux-2.6.19-vs2.1.1.5.1/kernel/vserver/switch.c 2006-12-10 21:51:25 +0100 @@ -261,6 +267,8 @@ long do_vcmd(uint32_t cmd, uint32_t id, #define VCF_ARES 0x06 /* includes admin */ #define VCF_SETUP 0x08 +#define VCF_ZIDOK 0x10 /* zero id okay */ + static inline long do_vserver(uint32_t cmd, uint32_t id, void __user *data, int compat) @@ -441,6 +452,9 @@ long do_vserver(uint32_t cmd, uint32_t i goto out; state = 6; + if (!id && (flags & VCF_ZIDOK)) + goto skip_id; + ret = -ESRCH; if (args & VCA_VXI) { vxi = lookup_vx_info(id); @@ -469,15 +483,15 @@ long do_vserver(uint32_t cmd, uint32_t i goto out_nxi; } } - +skip_id: state = 8; ret = do_vcmd(cmd, id, vxi, nxi, data, compat); out_nxi: - if (args & VCA_NXI) + if ((args & VCA_NXI) && nxi) put_nx_info(nxi); out_vxi: - if (args & VCA_VXI) + if ((args & VCA_VXI) && vxi) put_vx_info(vxi); out: vxdprintk(VXD_CBIT(switch, 1),