+int vc_ctx_kill(struct vx_info *vxi, void __user *data)
+{
+ struct vcmd_ctx_kill_v0 vc_data;
+
+ if (copy_from_user (&vc_data, data, sizeof(vc_data)))
+ return -EFAULT;
+
+ /* special check to allow guest shutdown */
+ if (!vx_info_flags(vxi, VXF_STATE_ADMIN, 0) &&
+ /* forbid killall pid=0 when init is present */
+ (((vc_data.pid < 1) && vxi->vx_initpid) ||
+ (vc_data.pid > 1)))
+ return -EACCES;
+
+ return vx_info_kill(vxi, vc_data.pid, vc_data.sig);
+}
+