abort 54f4985f-libxl-fix-libvirtd-double-free.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=380
91 lines
2.6 KiB
Diff
91 lines
2.6 KiB
Diff
References: bsc#949138
|
|
|
|
Subject: libxl: make some _dispose functions idempotent and tolerate NULL
|
|
From: Wei Liu wei.liu2@citrix.com Wed Feb 25 14:56:02 2015 +0000
|
|
Date: Mon Mar 2 17:05:35 2015 +0000:
|
|
Git: 1ea68f1a82ef94b3cc644fa70307c5151f356baf
|
|
|
|
These functions are not generated, so we need to do it by hand.
|
|
|
|
Functions list:
|
|
libxl_bitmap_dispose
|
|
libxl_string_list_dispose
|
|
libxl_key_value_list_dipose
|
|
libxl_cpuid_dispose
|
|
|
|
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
|
|
Cc: Ian Campbell <ian.campbell@citrix.com>
|
|
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
|
|
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
|
|
|
Index: xen-4.5.1-testing/tools/libxl/libxl.c
|
|
===================================================================
|
|
--- xen-4.5.1-testing.orig/tools/libxl/libxl.c
|
|
+++ xen-4.5.1-testing/tools/libxl/libxl.c
|
|
@@ -211,9 +211,12 @@ void libxl_string_list_dispose(libxl_str
|
|
if (!sl)
|
|
return;
|
|
|
|
- for (i = 0; sl[i] != NULL; i++)
|
|
+ for (i = 0; sl[i] != NULL; i++) {
|
|
free(sl[i]);
|
|
+ sl[i] = NULL;
|
|
+ }
|
|
free(sl);
|
|
+ *psl = NULL;
|
|
}
|
|
|
|
void libxl_string_list_copy(libxl_ctx *ctx,
|
|
@@ -273,10 +276,14 @@ void libxl_key_value_list_dispose(libxl_
|
|
|
|
for (i = 0; kvl[i] != NULL; i += 2) {
|
|
free(kvl[i]);
|
|
- if (kvl[i + 1])
|
|
+ kvl[i] = NULL;
|
|
+ if (kvl[i + 1]) {
|
|
free(kvl[i + 1]);
|
|
+ kvl[i+1] = NULL;
|
|
+ }
|
|
}
|
|
free(kvl);
|
|
+ *pkvl = NULL;
|
|
}
|
|
|
|
void libxl_key_value_list_copy(libxl_ctx *ctx,
|
|
Index: xen-4.5.1-testing/tools/libxl/libxl_cpuid.c
|
|
===================================================================
|
|
--- xen-4.5.1-testing.orig/tools/libxl/libxl_cpuid.c
|
|
+++ xen-4.5.1-testing/tools/libxl/libxl_cpuid.c
|
|
@@ -28,10 +28,13 @@ void libxl_cpuid_dispose(libxl_cpuid_pol
|
|
return;
|
|
for (i = 0; cpuid_list[i].input[0] != XEN_CPUID_INPUT_UNUSED; i++) {
|
|
for (j = 0; j < 4; j++)
|
|
- if (cpuid_list[i].policy[j] != NULL)
|
|
+ if (cpuid_list[i].policy[j] != NULL) {
|
|
free(cpuid_list[i].policy[j]);
|
|
+ cpuid_list[i].policy[j] = NULL;
|
|
+ }
|
|
}
|
|
free(cpuid_list);
|
|
+ *p_cpuid_list = NULL;
|
|
return;
|
|
}
|
|
|
|
Index: xen-4.5.1-testing/tools/libxl/libxl_utils.c
|
|
===================================================================
|
|
--- xen-4.5.1-testing.orig/tools/libxl/libxl_utils.c
|
|
+++ xen-4.5.1-testing/tools/libxl/libxl_utils.c
|
|
@@ -604,7 +604,12 @@ void libxl_bitmap_init(libxl_bitmap *map
|
|
|
|
void libxl_bitmap_dispose(libxl_bitmap *map)
|
|
{
|
|
+ if (!map)
|
|
+ return;
|
|
+
|
|
free(map->map);
|
|
+ map->map = NULL;
|
|
+ map->size = 0;
|
|
}
|
|
|
|
void libxl_bitmap_copy(libxl_ctx *ctx, libxl_bitmap *dptr,
|