mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-09 06:25:19 +00:00
qemu: block: Validate node-names for use with qemu
qemu declares node-name as a 32 byte buffer and silently truncates anything longer than that. This is unacceptable for libvirt, so we need to make sure that we won't ever supply a node-name exceeding 31 chars. Add a function which will do the validation and use it to validate storage-protocol node names. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
d94aa38ffb
commit
58505900c5
@ -27,6 +27,24 @@
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_QEMU
|
||||
|
||||
/* qemu declares the buffer for node names as a 32 byte array */
|
||||
static const size_t qemuBlockNodeNameBufSize = 32;
|
||||
|
||||
static int
|
||||
qemuBlockNodeNameValidate(const char *nn)
|
||||
{
|
||||
if (!nn)
|
||||
return 0;
|
||||
|
||||
if (strlen(nn) >= qemuBlockNodeNameBufSize) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("node-name '%s' too long for qemu"), nn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
qemuBlockNamedNodesArrayToHash(size_t pos ATTRIBUTE_UNUSED,
|
||||
@ -1107,7 +1125,8 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src,
|
||||
break;
|
||||
}
|
||||
|
||||
if (virJSONValueObjectAdd(fileprops, "S:node-name", src->nodestorage, NULL) < 0) {
|
||||
if (qemuBlockNodeNameValidate(src->nodestorage) < 0 ||
|
||||
virJSONValueObjectAdd(fileprops, "S:node-name", src->nodestorage, NULL) < 0) {
|
||||
virJSONValueFree(fileprops);
|
||||
return NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user