mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
libxenlight: fix segfault when domid_to_name returns NULL
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@tycho.nsa.gov>
This commit is contained in:
1 parent
778143a050
commit
aec29abd5b
1 file changed
+3
-3
@@ -33,11 +33,11 @@ int xs_writev(struct xs_handle *xsh, xs_transaction_t t, char *dir, char *kvs[])
|
||||
|
||||
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 @@ int libxl_xs_writev(struct libxl_ctx *ctx, xs_transaction_t t,
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||