[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] xenbus: fix type inconsistency with xenbus_conn()
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxxxx> # Date 1301756069 -3600 # Node ID 0bee20f8e418d32ab5828eb57c7542ca27ce425d # Parent 8fe973d8fb987640dff885169bc64c7e7be3a772 xenbus: fix type inconsistency with xenbus_conn() Its (bogus) declaration in xenbus_dev.c was inconsistent with the actual implementation, leaving room for stack corruption on 64-bit systems. Thus move the declaration to a header included by both parties, and use proper types for the parameters. Additionally, the function is needed on privileged kernels only, and hence neither the potentially forward-incompatible HAVE_UNLOCKED_IOCTL conditionals in xenbus_dev.c are needed, nor does the function (and its helper) need to be compiled in unprivileged builds. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> --- diff -r 8fe973d8fb98 -r 0bee20f8e418 drivers/xen/xenbus/xenbus_comms.h --- a/drivers/xen/xenbus/xenbus_comms.h Fri Mar 11 16:18:59 2011 +0000 +++ b/drivers/xen/xenbus/xenbus_comms.h Sat Apr 02 15:54:29 2011 +0100 @@ -59,4 +59,11 @@ return s == XENBUS_XSD_FOREIGN_READY || s == XENBUS_XSD_LOCAL_READY; } +#if defined(CONFIG_XEN_XENBUS_DEV) && defined(CONFIG_XEN_PRIVILEGED_GUEST) +#include <xen/interface/event_channel.h> +#include <xen/interface/grant_table.h> + +int xenbus_conn(domid_t, grant_ref_t *, evtchn_port_t *); +#endif + #endif /* _XENBUS_COMMS_H */ diff -r 8fe973d8fb98 -r 0bee20f8e418 drivers/xen/xenbus/xenbus_dev.c --- a/drivers/xen/xenbus/xenbus_dev.c Fri Mar 11 16:18:59 2011 +0000 +++ b/drivers/xen/xenbus/xenbus_dev.c Sat Apr 02 15:54:29 2011 +0100 @@ -395,12 +395,10 @@ return 0; } -#ifdef HAVE_UNLOCKED_IOCTL +#ifdef CONFIG_XEN_PRIVILEGED_GUEST static long xenbus_dev_ioctl(struct file *file, unsigned int cmd, unsigned long data) { - extern int xenbus_conn(domid_t remote_dom, int *grant_ref, - evtchn_port_t *local_port); void __user *udata = (void __user *) data; int ret = -ENOTTY; @@ -453,7 +451,7 @@ .open = xenbus_dev_open, .release = xenbus_dev_release, .poll = xenbus_dev_poll, -#ifdef HAVE_UNLOCKED_IOCTL +#ifdef CONFIG_XEN_PRIVILEGED_GUEST .unlocked_ioctl = xenbus_dev_ioctl #endif }; diff -r 8fe973d8fb98 -r 0bee20f8e418 drivers/xen/xenbus/xenbus_probe.c --- a/drivers/xen/xenbus/xenbus_probe.c Fri Mar 11 16:18:59 2011 +0000 +++ b/drivers/xen/xenbus/xenbus_probe.c Sat Apr 02 15:54:29 2011 +0100 @@ -871,7 +871,8 @@ } -#if defined(CONFIG_PROC_FS) && defined(CONFIG_XEN_PRIVILEGED_GUEST) +#ifdef CONFIG_XEN_PRIVILEGED_GUEST +#ifdef CONFIG_PROC_FS static struct file_operations xsd_kva_fops; static struct proc_dir_entry *xsd_kva_intf; static struct proc_dir_entry *xsd_port_intf; @@ -933,6 +934,7 @@ } #endif +#ifdef CONFIG_XEN_XENBUS_DEV static int xb_free_port(evtchn_port_t port) { struct evtchn_close close; @@ -940,7 +942,8 @@ return HYPERVISOR_event_channel_op(EVTCHNOP_close, &close); } -int xenbus_conn(domid_t remote_dom, unsigned long *grant_ref, evtchn_port_t *local_port) +int xenbus_conn(domid_t remote_dom, grant_ref_t *grant_ref, + evtchn_port_t *local_port) { struct evtchn_alloc_unbound alloc_unbound; int rc, rc2; @@ -948,10 +951,8 @@ BUG_ON(atomic_read(&xenbus_xsd_state) != XENBUS_XSD_FOREIGN_INIT); BUG_ON(!is_initial_xendomain()); -#if defined(CONFIG_PROC_FS) && defined(CONFIG_XEN_PRIVILEGED_GUEST) remove_xen_proc_entry("xsd_kva"); remove_xen_proc_entry("xsd_port"); -#endif rc = xb_free_port(xen_store_evtchn); if (rc != 0) @@ -988,6 +989,8 @@ xen_store_evtchn = -1; return rc; } +#endif +#endif /* CONFIG_XEN_PRIVILEGED_GUEST */ static int xenbus_probe_init(void) { _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog |
Lists.xenproject.org is hosted with RackSpace, monitoring our |