- don't use xenbus_gather() for just a single, non-string item (as it
doesn't do format checking on its inputs)
- grant references don't need to be parsed as "long", since grant_ref_t
is a typedef of uint32_t
- in the frontend protocol determination logic in blkback and blktap,
don't parse into a local buffer - use the allocated string directly
Signed-off-by: Jan Beulcih <jbeulich@xxxxxxxxxx>
--- a/drivers/xen/blkback/xenbus.c
+++ b/drivers/xen/blkback/xenbus.c
@@ -485,14 +485,13 @@ again:
static int connect_ring(struct backend_info *be)
{
struct xenbus_device *dev = be->dev;
- unsigned long ring_ref;
- unsigned int evtchn;
- char protocol[64] = "";
+ unsigned int ring_ref, evtchn;
+ char *protocol;
int err;
DPRINTK("%s", dev->otherend);
- err = xenbus_gather(XBT_NIL, dev->otherend, "ring-ref", "%lu",
&ring_ref,
+ err = xenbus_gather(XBT_NIL, dev->otherend, "ring-ref", "%u", &ring_ref,
"event-channel", "%u", &evtchn, NULL);
if (err) {
xenbus_dev_fatal(dev, err,
@@ -503,9 +502,9 @@ static int connect_ring(struct backend_i
be->blkif->blk_protocol = BLKIF_PROTOCOL_NATIVE;
err = xenbus_gather(XBT_NIL, dev->otherend, "protocol",
- "%63s", protocol, NULL);
+ NULL, &protocol, NULL);
if (err)
- strcpy(protocol, "unspecified, assuming native");
+ protocol = NULL;
else if (0 == strcmp(protocol, XEN_IO_PROTO_ABI_NATIVE))
be->blkif->blk_protocol = BLKIF_PROTOCOL_NATIVE;
else if (0 == strcmp(protocol, XEN_IO_PROTO_ABI_X86_32))
@@ -514,16 +513,19 @@ static int connect_ring(struct backend_i
be->blkif->blk_protocol = BLKIF_PROTOCOL_X86_64;
else {
xenbus_dev_fatal(dev, err, "unknown fe protocol %s", protocol);
+ kfree(protocol);
return -1;
}
printk(KERN_INFO
- "blkback: ring-ref %ld, event-channel %d, protocol %d (%s)\n",
- ring_ref, evtchn, be->blkif->blk_protocol, protocol);
+ "blkback: ring-ref %u, event-channel %u, protocol %d (%s)\n",
+ ring_ref, evtchn, be->blkif->blk_protocol,
+ protocol ?: "unspecified, assuming native");
+ kfree(protocol);
/* Map the shared frame, irq etc. */
err = blkif_map(be->blkif, ring_ref, evtchn);
if (err) {
- xenbus_dev_fatal(dev, err, "mapping ring-ref %lu port %u",
+ xenbus_dev_fatal(dev, err, "mapping ring-ref %u port %u",
ring_ref, evtchn);
return err;
}
--- a/drivers/xen/blkfront/blkfront.c
+++ b/drivers/xen/blkfront/blkfront.c
@@ -334,7 +334,7 @@ static void connect(struct blkfront_info
*/
err = xenbus_scanf(XBT_NIL, info->xbdev->otherend,
"sectors", "%Lu", §ors);
- if (XENBUS_EXIST_ERR(err))
+ if (err != 1)
return;
printk(KERN_INFO "Setting capacity to %Lu\n",
sectors);
@@ -359,10 +359,9 @@ static void connect(struct blkfront_info
return;
}
- err = xenbus_gather(XBT_NIL, info->xbdev->otherend,
- "feature-barrier", "%d", &info->feature_barrier,
- NULL);
- if (err)
+ err = xenbus_scanf(XBT_NIL, info->xbdev->otherend,
+ "feature-barrier", "%d", &info->feature_barrier);
+ if (err <= 0)
info->feature_barrier = 0;
err = xlvbd_add(sectors, info->vdevice, binfo, sector_size, info);
--- a/drivers/xen/blktap/xenbus.c
+++ b/drivers/xen/blktap/xenbus.c
@@ -319,7 +319,7 @@ static void tap_backend_changed(struct x
* and disk info to xenstore
*/
err = xenbus_gather(XBT_NIL, dev->nodename, "info", "%lu", &info,
- NULL);
+ "sectors", "%Lu", &be->blkif->sectors, NULL);
if (XENBUS_EXIST_ERR(err))
return;
if (err) {
@@ -329,9 +329,6 @@ static void tap_backend_changed(struct x
DPRINTK("Userspace update on disk info, %lu\n",info);
- err = xenbus_gather(XBT_NIL, dev->nodename, "sectors", "%llu",
- &be->blkif->sectors, NULL);
-
/* Associate tap dev with domid*/
be->blkif->dev_num = dom_to_devid(be->blkif->domid, be->xenbus_id,
be->blkif);
@@ -436,14 +433,13 @@ again:
static int connect_ring(struct backend_info *be)
{
struct xenbus_device *dev = be->dev;
- unsigned long ring_ref;
- unsigned int evtchn;
- char protocol[64];
+ unsigned int ring_ref, evtchn;
+ char *protocol;
int err;
DPRINTK("%s\n", dev->otherend);
- err = xenbus_gather(XBT_NIL, dev->otherend, "ring-ref", "%lu",
+ err = xenbus_gather(XBT_NIL, dev->otherend, "ring-ref", "%u",
&ring_ref, "event-channel", "%u", &evtchn, NULL);
if (err) {
xenbus_dev_fatal(dev, err,
@@ -454,9 +450,9 @@ static int connect_ring(struct backend_i
be->blkif->blk_protocol = BLKIF_PROTOCOL_NATIVE;
err = xenbus_gather(XBT_NIL, dev->otherend, "protocol",
- "%63s", protocol, NULL);
+ NULL, &protocol, NULL);
if (err)
- strcpy(protocol, "unspecified, assuming native");
+ protocol = NULL;
else if (0 == strcmp(protocol, XEN_IO_PROTO_ABI_NATIVE))
be->blkif->blk_protocol = BLKIF_PROTOCOL_NATIVE;
else if (0 == strcmp(protocol, XEN_IO_PROTO_ABI_X86_32))
@@ -465,16 +461,19 @@ static int connect_ring(struct backend_i
be->blkif->blk_protocol = BLKIF_PROTOCOL_X86_64;
else {
xenbus_dev_fatal(dev, err, "unknown fe protocol %s", protocol);
+ kfree(protocol);
return -1;
}
printk(KERN_INFO
- "blktap: ring-ref %ld, event-channel %d, protocol %d (%s)\n",
- ring_ref, evtchn, be->blkif->blk_protocol, protocol);
+ "blktap: ring-ref %u, event-channel %u, protocol %d (%s)\n",
+ ring_ref, evtchn, be->blkif->blk_protocol,
+ protocol ?: "unspecified, assuming native");
+ kfree(protocol);
/* Map the shared frame, irq etc. */
err = tap_blkif_map(be->blkif, dev, ring_ref, evtchn);
if (err) {
- xenbus_dev_fatal(dev, err, "mapping ring-ref %lu port %u",
+ xenbus_dev_fatal(dev, err, "mapping ring-ref %u port %u",
ring_ref, evtchn);
return err;
}
--- a/drivers/xen/core/reboot.c
+++ b/drivers/xen/core/reboot.c
@@ -215,7 +215,7 @@ static void sysrq_handler(struct xenbus_
err = xenbus_transaction_start(&xbt);
if (err)
return;
- if (!xenbus_scanf(xbt, "control", "sysrq", "%c", &sysrq_key)) {
+ if (xenbus_scanf(xbt, "control", "sysrq", "%c", &sysrq_key) <= 0) {
printk(KERN_ERR "Unable to read sysrq code in "
"control/sysrq\n");
xenbus_transaction_end(xbt, 1);
--- a/drivers/xen/netback/xenbus.c
+++ b/drivers/xen/netback/xenbus.c
@@ -358,7 +358,7 @@ static int connect_rings(struct backend_
{
netif_t *netif = be->netif;
struct xenbus_device *dev = be->dev;
- unsigned long tx_ring_ref, rx_ring_ref;
+ unsigned int tx_ring_ref, rx_ring_ref;
unsigned int evtchn, rx_copy;
int err;
int val;
@@ -366,8 +366,8 @@ static int connect_rings(struct backend_
DPRINTK("");
err = xenbus_gather(XBT_NIL, dev->otherend,
- "tx-ring-ref", "%lu", &tx_ring_ref,
- "rx-ring-ref", "%lu", &rx_ring_ref,
+ "tx-ring-ref", "%u", &tx_ring_ref,
+ "rx-ring-ref", "%u", &rx_ring_ref,
"event-channel", "%u", &evtchn, NULL);
if (err) {
xenbus_dev_fatal(dev, err,
@@ -421,7 +421,7 @@ static int connect_rings(struct backend_
err = netif_map(be, tx_ring_ref, rx_ring_ref, evtchn);
if (err) {
xenbus_dev_fatal(dev, err,
- "mapping shared-frames %lu/%lu port %u",
+ "mapping shared-frames %u/%u port %u",
tx_ring_ref, rx_ring_ref, evtchn);
return err;
}
--- a/drivers/xen/scsiback/xenbus.c
+++ b/drivers/xen/scsiback/xenbus.c
@@ -60,13 +60,12 @@ static int __vscsiif_name(struct backend
static int scsiback_map(struct backend_info *be)
{
struct xenbus_device *dev = be->dev;
- unsigned long ring_ref;
- unsigned int evtchn;
+ unsigned int ring_ref, evtchn;
int err;
char name[TASK_COMM_LEN];
err = xenbus_gather(XBT_NIL, dev->otherend,
- "ring-ref", "%lu", &ring_ref,
+ "ring-ref", "%u", &ring_ref,
"event-channel", "%u", &evtchn, NULL);
if (err) {
xenbus_dev_fatal(dev, err, "reading %s ring", dev->otherend);
--- a/drivers/xen/tpmback/xenbus.c
+++ b/drivers/xen/tpmback/xenbus.c
@@ -210,12 +210,11 @@ abort:
static int connect_ring(struct backend_info *be)
{
struct xenbus_device *dev = be->dev;
- unsigned long ring_ref;
- unsigned int evtchn;
+ unsigned int ring_ref, evtchn;
int err;
err = xenbus_gather(XBT_NIL, dev->otherend,
- "ring-ref", "%lu", &ring_ref,
+ "ring-ref", "%u", &ring_ref,
"event-channel", "%u", &evtchn, NULL);
if (err) {
xenbus_dev_error(dev, err,
@@ -238,7 +237,7 @@ static int connect_ring(struct backend_i
err = tpmif_map(be->tpmif, ring_ref, evtchn);
if (err) {
xenbus_dev_error(dev, err,
- "mapping shared-frame %lu port %u",
+ "mapping shared-frame %u port %u",
ring_ref, evtchn);
return err;
}
--- a/drivers/xen/usbback/xenbus.c
+++ b/drivers/xen/usbback/xenbus.c
@@ -226,14 +226,12 @@ fail:
static int connect_rings(usbif_t *usbif)
{
struct xenbus_device *dev = usbif->xbdev;
- unsigned long urb_ring_ref;
- unsigned long conn_ring_ref;
- unsigned int evtchn;
+ unsigned int urb_ring_ref, conn_ring_ref, evtchn;
int err;
err = xenbus_gather(XBT_NIL, dev->otherend,
- "urb-ring-ref", "%lu", &urb_ring_ref,
- "conn-ring-ref", "%lu", &conn_ring_ref,
+ "urb-ring-ref", "%u", &urb_ring_ref,
+ "conn-ring-ref", "%u", &conn_ring_ref,
"event-channel", "%u", &evtchn, NULL);
if (err) {
xenbus_dev_fatal(dev, err,
@@ -242,13 +240,14 @@ static int connect_rings(usbif_t *usbif)
return err;
}
- printk("usbback: urb-ring-ref %ld, conn-ring-ref %ld, event-channel
%d\n",
+ printk("usbback: urb-ring-ref %u, conn-ring-ref %u,"
+ " event-channel %u\n",
urb_ring_ref, conn_ring_ref, evtchn);
err = usbif_map(usbif, urb_ring_ref, conn_ring_ref, evtchn);
if (err) {
xenbus_dev_fatal(dev, err,
- "mapping urb-ring-ref %lu conn-ring-ref %lu
port %u",
+ "mapping urb-ring-ref %u conn-ring-ref %u port
%u",
urb_ring_ref, conn_ring_ref, evtchn);
return err;
}
--- a/drivers/xen/xenbus/xenbus_client.c
+++ b/drivers/xen/xenbus/xenbus_client.c
@@ -276,9 +276,9 @@ EXPORT_SYMBOL_GPL(xenbus_free_evtchn);
enum xenbus_state xenbus_read_driver_state(const char *path)
{
- enum xenbus_state result;
- int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL);
- if (err)
+ int result;
+
+ if (xenbus_scanf(XBT_NIL, path, "state", "%d", &result) != 1)
result = XenbusStateUnknown;
return result;
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -865,7 +865,8 @@ static int be_state;
static void xenbus_reset_state_changed(struct xenbus_watch *w, const char **v,
unsigned int l)
{
- xenbus_scanf(XBT_NIL, v[XS_WATCH_PATH], "", "%i", &be_state);
+ if (xenbus_scanf(XBT_NIL, v[XS_WATCH_PATH], "", "%i", &be_state) != 1)
+ be_state = XenbusStateUnknown;
printk(KERN_INFO "XENBUS: %s %s\n", v[XS_WATCH_PATH],
xenbus_strstate(be_state));
wake_up(&be_state_wq);
}
xen-xenbus-scanf-gather.patch
Description: Text document
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|