[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] libxl: make sure buffer is null-terminated in libxl_read_file_contents
On XenServer 7.1.1, we start a vm with XAPI but attach a block device with xl. We create an empty json config for the vm with the content "{}\n" and then run 'xl block-attach': # xl block-attach 1 phy:/dev/loop0 xvdz w libxl: error: libxl_json.c:950:libxl__json_parse: yajl error: parse error: trailing garbage {} K] (right here) ------^ libxl: error: libxl_json.c:1053:libxl__object_from_json: unable to generate libxl__json_object from JSON representation of libxl_domain_config. libxl: error: libxl.c:1995:device_addrm_aocomplete: unable to add device libxl_device_disk_add failed. After investigation, we found the buffer returned from libxl_read_file_contents is not null-terminated. But later in libxl__object_from_json, the buffer is expected to be null-terminated. So parsing may exceeded the end of file and get in to uninisialized momery area. Signed-off-by: Robin Lee <robinlee.sysu@xxxxxxxxx> --- tools/libxl/libxl_utils.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index 507ee56..51134a7 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -362,8 +362,9 @@ int libxl_read_file_contents(libxl_ctx *ctx, const char *filename, datalen = stab.st_size; if (stab.st_size && data_r) { - data = malloc(datalen); + data = malloc(((size_t)datalen)+1); if (!data) goto xe; + data[datalen] = 0; /* make sure buffer null-terminated */ rs = fread(data, 1, datalen, f); if (rs != datalen) { -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |