The function libxl_domid_to_name() can return NULL if the path
/local/domain/%d/name does not exist. This causes a segfault if the
NULL name is later passed as a value to libxl_xs_writev(). I'm hitting
this making a call to libxl_device_vfb_add() from my graphical switcher
application.
This patch modifies xs_writev() and libxl_xs_writev() to skip NULL values.
Signed-off-by: Eamon Walsh <ewalsh@xxxxxxxxxxxxx>
---
Alternative approaches would be to either not return NULL from
libxl_domid_to_name(), or not to include "name" in the list of
key/values within libxl_device_vfb_add() and friends.
diff -r 4152a3ce90a7 tools/libxl/libxl_xshelp.c
--- a/tools/libxl/libxl_xshelp.c Thu Mar 11 17:40:35 2010 +0000
+++ b/tools/libxl/libxl_xshelp.c Fri Mar 12 15:51:44 2010 -0500
@@ -33,11 +33,11 @@
for (i = 0; kvs[i] != NULL; i += 2) {
asprintf(&path, "%s/%s", dir, kvs[i]);
- if (path) {
+ if (path && kvs[i + 1]) {
int length = strlen(kvs[i + 1]);
xs_write(xsh, t, path, kvs[i + 1], length);
- free(path);
}
+ free(path);
}
return 0;
}
@@ -74,7 +74,7 @@
for (i = 0; kvs[i] != NULL; i += 2) {
path = libxl_sprintf(ctx, "%s/%s", dir, kvs[i]);
- if (path) {
+ if (path && kvs[i + 1]) {
int length = strlen(kvs[i + 1]);
xs_write(ctx->xsh, t, path, kvs[i + 1], length);
}
--
Eamon Walsh
National Security Agency
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|