From: Mike Neilsen Date: Wed, 22 Jan 2014 17:41:11 +0000 (-0600) Subject: mini-os: Fix stubdom build failures on gcc 4.8 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=ca6109baeb15be11c4d303e92d0c5535f6f61595;p=people%2Fliuw%2Flibxenctrl-split%2Fmini-os.git mini-os: Fix stubdom build failures on gcc 4.8 This is a fix for bug 35: http://bugs.xenproject.org/xen/bug/35 This bug report describes several format string mismatches which prevent building the stubdom target in Xen 4.3 and Xen 4.4-rc2 on gcc 4.8. This is a copy of Alex Sharp's original patch with the following modifications: * Andrew Cooper's recommendation applied to extras/mini-os/xenbus/xenbus.c to avoid stack corruption * Samuel Thibault's recommendation to make "fun" an unsigned int rather than an unsigned long in pcifront_physical_to_virtual and related functions (extras/mini-os/include/pcifront.h and extras/mini-os/pcifront.c) Tested on x86_64 gcc Ubuntu/Linaro 4.8.1-10ubuntu9. Coverity-IDs: 1055807 1055808 1055809 1055810 Signed-off-by: Mike Neilsen Acked-by: Samuel Thibault Reviewed-by: Andrew Cooper Acked-by: Ian Campbell --- diff --git a/fbfront.c b/fbfront.c index 1e01513..9cc07b4 100644 --- a/fbfront.c +++ b/fbfront.c @@ -105,7 +105,7 @@ again: free(err); } - err = xenbus_printf(xbt, nodename, "page-ref","%u", virt_to_mfn(s)); + err = xenbus_printf(xbt, nodename, "page-ref","%lu", virt_to_mfn(s)); if (err) { message = "writing page-ref"; goto abort_transaction; @@ -468,7 +468,7 @@ again: free(err); } - err = xenbus_printf(xbt, nodename, "page-ref","%u", virt_to_mfn(s)); + err = xenbus_printf(xbt, nodename, "page-ref","%lu", virt_to_mfn(s)); if (err) { message = "writing page-ref"; goto abort_transaction; diff --git a/include/pcifront.h b/include/pcifront.h index 0a6be8e..1b05963 100644 --- a/include/pcifront.h +++ b/include/pcifront.h @@ -7,23 +7,23 @@ void pcifront_op(struct pcifront_dev *dev, struct xen_pci_op *op); void pcifront_scan(struct pcifront_dev *dev, void (*fun)(unsigned int domain, unsigned int bus, unsigned slot, unsigned int fun)); int pcifront_conf_read(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun, + unsigned int bus, unsigned int slot, unsigned int fun, unsigned int off, unsigned int size, unsigned int *val); int pcifront_conf_write(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun, + unsigned int bus, unsigned int slot, unsigned int fun, unsigned int off, unsigned int size, unsigned int val); int pcifront_enable_msi(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun); + unsigned int bus, unsigned int slot, unsigned int fun); int pcifront_disable_msi(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun); + unsigned int bus, unsigned int slot, unsigned int fun); int pcifront_enable_msix(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun, + unsigned int bus, unsigned int slot, unsigned int fun, struct xen_msix_entry *entries, int n); int pcifront_disable_msix(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun); + unsigned int bus, unsigned int slot, unsigned int fun); void shutdown_pcifront(struct pcifront_dev *dev); diff --git a/pcifront.c b/pcifront.c index 16a4b49..0fc5b30 100644 --- a/pcifront.c +++ b/pcifront.c @@ -384,7 +384,7 @@ int pcifront_physical_to_virtual (struct pcifront_dev *dev, unsigned int *dom, unsigned int *bus, unsigned int *slot, - unsigned long *fun) + unsigned int *fun) { /* FIXME: the buffer sizing is a little lazy here. 10 extra bytes should be enough to hold the paths we need to construct, even @@ -456,7 +456,7 @@ void pcifront_op(struct pcifront_dev *dev, struct xen_pci_op *op) int pcifront_conf_read(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun, + unsigned int bus, unsigned int slot, unsigned int fun, unsigned int off, unsigned int size, unsigned int *val) { struct xen_pci_op op; @@ -486,7 +486,7 @@ int pcifront_conf_read(struct pcifront_dev *dev, int pcifront_conf_write(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun, + unsigned int bus, unsigned int slot, unsigned int fun, unsigned int off, unsigned int size, unsigned int val) { struct xen_pci_op op; @@ -513,7 +513,7 @@ int pcifront_conf_write(struct pcifront_dev *dev, int pcifront_enable_msi(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun) + unsigned int bus, unsigned int slot, unsigned int fun) { struct xen_pci_op op; @@ -538,7 +538,7 @@ int pcifront_enable_msi(struct pcifront_dev *dev, int pcifront_disable_msi(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun) + unsigned int bus, unsigned int slot, unsigned int fun) { struct xen_pci_op op; @@ -560,7 +560,7 @@ int pcifront_disable_msi(struct pcifront_dev *dev, int pcifront_enable_msix(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun, + unsigned int bus, unsigned int slot, unsigned int fun, struct xen_msix_entry *entries, int n) { struct xen_pci_op op; @@ -595,7 +595,7 @@ int pcifront_enable_msix(struct pcifront_dev *dev, int pcifront_disable_msix(struct pcifront_dev *dev, unsigned int dom, - unsigned int bus, unsigned int slot, unsigned long fun) + unsigned int bus, unsigned int slot, unsigned int fun) { struct xen_pci_op op; diff --git a/xenbus/xenbus.c b/xenbus/xenbus.c index ee1691b..c5d9b02 100644 --- a/xenbus/xenbus.c +++ b/xenbus/xenbus.c @@ -15,6 +15,7 @@ * **************************************************************************** **/ +#include #include #include #include @@ -672,7 +673,7 @@ char *xenbus_transaction_start(xenbus_transaction_t *xbt) err = errmsg(rep); if (err) return err; - sscanf((char *)(rep + 1), "%u", xbt); + sscanf((char *)(rep + 1), "%lu", xbt); free(rep); return NULL; } @@ -769,7 +770,7 @@ domid_t xenbus_get_self_id(void) domid_t ret; BUG_ON(xenbus_read(XBT_NIL, "domid", &dom_id)); - sscanf(dom_id, "%d", &ret); + sscanf(dom_id, "%"SCNd16, &ret); return ret; }