With some of the logic change from the Xencomm patch. In a few
hypercalls introduces a situation where you can potentially have memory
leaks if something fails. This patch address these issues.
Signed-off-by: Jerone Young <[EMAIL PROTECTED]>
diff -r 37ea4cf1281a arch/powerpc/platforms/xen/hcall.c
--- a/arch/powerpc/platforms/xen/hcall.c Tue Feb 06 17:10:20 2007 -0500
+++ b/arch/powerpc/platforms/xen/hcall.c Wed Feb 07 08:19:45 2007 -0600
@@ -203,11 +203,14 @@ int HYPERVISOR_sched_op(int cmd, void *a
desc = xencomm_map_no_alloc(arg, argsize);
- if (desc == NULL)
- return -EINVAL;
-
- rc = plpar_hcall_norets(XEN_MARK(__HYPERVISOR_sched_op),
- cmd, desc);
+ if (desc) {
+ rc = plpar_hcall_norets(XEN_MARK(__HYPERVISOR_sched_op),
+ cmd, desc);
+ xencomm_free(desc);
+ }
+ else {
+ rc = -EINVAL;
+ }
xencomm_free(ports);
@@ -389,8 +392,8 @@ static int xenppc_privcmd_domctl(privcmd
if (copy_to_user(user_op, &kern_op, sizeof(xen_domctl_t)))
ret = -EFAULT;
- xencomm_free(desc);
out:
+ xencomm_free(desc);
xencomm_free(op_desc);
return ret;
}
@@ -463,8 +466,8 @@ static int xenppc_privcmd_sysctl(privcmd
if (copy_to_user(user_op, &kern_op, sizeof(xen_sysctl_t)))
ret = -EFAULT;
- xencomm_free(desc);
out:
+ xencomm_free(desc);
xencomm_free(op_desc);
return ret;
}
@@ -514,8 +517,8 @@ static int xenppc_privcmd_platform_op(pr
if (copy_to_user(user_op, &kern_op, sizeof(xen_platform_op_t)))
ret = -EFAULT;
- xencomm_free(desc);
out:
+ xencomm_free(desc);
xencomm_free(op_desc);
return ret;
}
@@ -546,8 +549,10 @@ int HYPERVISOR_memory_op(unsigned int cm
mop->nr_extents *
sizeof(*xen_guest_handle(mop->extent_start)));
- if (desc == NULL)
+ if (desc == NULL) {
+ xencomm_free(op_desc);
return -ENOMEM;
+ }
set_xen_guest_handle(mop->extent_start,
desc);
_______________________________________________
Xen-ppc-devel mailing list
[email protected]
http://lists.xensource.com/xen-ppc-devel