Re: [libvirt] [PATCHv2 18/27] xen: reject unknown flags
2011/7/14 Eric Blake ebl...@redhat.com: On 07/13/2011 06:59 AM, Matthias Bolte wrote: 2011/7/8 Eric Blake ebl...@redhat.com: @@ -1629,8 +1633,10 @@ xenDaemonDomainSave(virDomainPtr domain, const char *filename) */ static int xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename, - unsigned int flags ATTRIBUTE_UNUSED) + unsigned int flags) { + virCheckFlags(0, -1); + if ((domain == NULL) || (domain-conn == NULL) || (domain-name == NULL) || (filename == NULL)) { virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); Third time fooled by ATTRIBUTE_UNUSED. xenDaemonDomainCoreDump understands VIR_DUMP_LIVE and VIR_DUMP_CRASH. Yep, which is why for v3, I've gone through and looked at every use of virCheckFlags(0, ...) to make sure that the next instance of 'flags' is not until the next function. I'll respin this patch for my v3 series. In the meantime, I've pushed 16 and 17. @@ -3151,10 +3160,12 @@ xenDaemonDomainMigratePrepare (virConnectPtr dconn, int *cookielen ATTRIBUTE_UNUSED, const char *uri_in, char **uri_out, - unsigned long flags ATTRIBUTE_UNUSED, + unsigned long flags, const char *dname ATTRIBUTE_UNUSED, unsigned long resource ATTRIBUTE_UNUSED) { + virCheckFlags(0, -1); + /* If uri_in is NULL, get the current hostname as a best guess * of how the source host should connect to us. Note that caller * deallocates this string. This breaks virDomainMigrate, because *DomainMigratePrepare is called with the flags passed to virDomainMigrate, even if xenDaemonDomainMigratePrepare doesn't use this flags it has to accept all flags that the Xen driver understand in general form migration. Good point, and somewhat relevant to your comments about ESX migration flags in 8/27 as well. I will also double-check that qemu and remote (the only other drivers with a MigratePrepare callback) are not affected. You should probably double-check all *DomainMigrate* driver functions as they all get the flags from the virDomainMigrate* functions. -- Matthias Bolte http://photron.blogspot.com -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCHv2 18/27] xen: reject unknown flags
On 07/14/2011 01:25 AM, Matthias Bolte wrote: I will also double-check that qemu and remote (the only other drivers with a MigratePrepare callback) are not affected. You should probably double-check all *DomainMigrate* driver functions as they all get the flags from the virDomainMigrate* functions. I did - the only affected hypervisors are qemu (which did the checks correctly, but still could be factored), ESX, and xen (both of which are in my v3 patch). -- Eric Blake ebl...@redhat.com+1-801-349-2682 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCHv2 18/27] xen: reject unknown flags
2011/7/8 Eric Blake ebl...@redhat.com: * src/xen/xen_driver.c (xenUnifiedDomainXMLFromNative) (xenUnifiedDomainXMLToNative, xenUnifiedDomainBlockPeek): Reject unknown flags. * src/xen/xen_hypervisor.c (xenHypervisorOpen) (xenHypervisorGetDomainState): Likewise. * src/xen/xen_inotify.c (xenInotifyOpen): Likewise. * src/xen/xs_internal.c (xenStoreOpen, xenStoreDomainGetState) (xenStoreDomainReboot): Likewise. * src/xen/xend_internal.c (xenDaemonOpen, xenDaemonDomainReboot) (xenDaemonDomainCoreDump, xenDaemonDomainGetState) (xenDaemonDomainMigratePrepare): Likewise. (xenDaemonDomainGetXMLDesc): Prefer unsigned flags. * src/xen/xend_internal.h (xenDaemonDomainGetXMLDesc): Likewise. * src/xen/xm_internal.h (xenXMDomainGetXMLDesc): Likewise. * src/xen/xm_internal.c (xenXMDomainGetXMLDesc): Likewise. (xenXMOpen, xenXMDomainGetState): Reject unknown flags. --- src/xen/xen_driver.c | 12 +--- src/xen/xen_hypervisor.c | 8 ++-- src/xen/xen_inotify.c | 4 +++- src/xen/xend_internal.c | 23 +-- src/xen/xend_internal.h | 3 ++- src/xen/xm_internal.c | 11 --- src/xen/xm_internal.h | 2 +- src/xen/xs_internal.c | 12 +--- 8 files changed, 55 insertions(+), 20 deletions(-) @@ -1629,8 +1633,10 @@ xenDaemonDomainSave(virDomainPtr domain, const char *filename) */ static int xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename, - unsigned int flags ATTRIBUTE_UNUSED) + unsigned int flags) { + virCheckFlags(0, -1); + if ((domain == NULL) || (domain-conn == NULL) || (domain-name == NULL) || (filename == NULL)) { virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); Third time fooled by ATTRIBUTE_UNUSED. xenDaemonDomainCoreDump understands VIR_DUMP_LIVE and VIR_DUMP_CRASH. @@ -3151,10 +3160,12 @@ xenDaemonDomainMigratePrepare (virConnectPtr dconn, int *cookielen ATTRIBUTE_UNUSED, const char *uri_in, char **uri_out, - unsigned long flags ATTRIBUTE_UNUSED, + unsigned long flags, const char *dname ATTRIBUTE_UNUSED, unsigned long resource ATTRIBUTE_UNUSED) { + virCheckFlags(0, -1); + /* If uri_in is NULL, get the current hostname as a best guess * of how the source host should connect to us. Note that caller * deallocates this string. This breaks virDomainMigrate, because *DomainMigratePrepare is called with the flags passed to virDomainMigrate, even if xenDaemonDomainMigratePrepare doesn't use this flags it has to accept all flags that the Xen driver understand in general form migration. A quick grep for VIR_MIGRATE_ shows that those are at least VIR_MIGRATE_LIVE VIR_MIGRATE_PERSIST_DEST VIR_MIGRATE_UNDEFINE_SOURCE VIR_MIGRATE_PAUSED -- Matthias Bolte http://photron.blogspot.com -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCHv2 18/27] xen: reject unknown flags
* src/xen/xen_driver.c (xenUnifiedDomainXMLFromNative) (xenUnifiedDomainXMLToNative, xenUnifiedDomainBlockPeek): Reject unknown flags. * src/xen/xen_hypervisor.c (xenHypervisorOpen) (xenHypervisorGetDomainState): Likewise. * src/xen/xen_inotify.c (xenInotifyOpen): Likewise. * src/xen/xs_internal.c (xenStoreOpen, xenStoreDomainGetState) (xenStoreDomainReboot): Likewise. * src/xen/xend_internal.c (xenDaemonOpen, xenDaemonDomainReboot) (xenDaemonDomainCoreDump, xenDaemonDomainGetState) (xenDaemonDomainMigratePrepare): Likewise. (xenDaemonDomainGetXMLDesc): Prefer unsigned flags. * src/xen/xend_internal.h (xenDaemonDomainGetXMLDesc): Likewise. * src/xen/xm_internal.h (xenXMDomainGetXMLDesc): Likewise. * src/xen/xm_internal.c (xenXMDomainGetXMLDesc): Likewise. (xenXMOpen, xenXMDomainGetState): Reject unknown flags. --- src/xen/xen_driver.c | 12 +--- src/xen/xen_hypervisor.c |8 ++-- src/xen/xen_inotify.c|4 +++- src/xen/xend_internal.c | 23 +-- src/xen/xend_internal.h |3 ++- src/xen/xm_internal.c| 11 --- src/xen/xm_internal.h|2 +- src/xen/xs_internal.c| 12 +--- 8 files changed, 55 insertions(+), 20 deletions(-) diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c index 0f66395..2cdb6c4 100644 --- a/src/xen/xen_driver.c +++ b/src/xen/xen_driver.c @@ -1261,7 +1261,7 @@ static char * xenUnifiedDomainXMLFromNative(virConnectPtr conn, const char *format, const char *config, - unsigned int flags ATTRIBUTE_UNUSED) + unsigned int flags) { virDomainDefPtr def = NULL; char *ret = NULL; @@ -1271,6 +1271,8 @@ xenUnifiedDomainXMLFromNative(virConnectPtr conn, int vncport; GET_PRIVATE(conn); +virCheckFlags(0, NULL); + if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) { xenUnifiedError(VIR_ERR_INVALID_ARG, @@ -1311,13 +1313,15 @@ static char * xenUnifiedDomainXMLToNative(virConnectPtr conn, const char *format, const char *xmlData, -unsigned int flags ATTRIBUTE_UNUSED) +unsigned int flags) { virDomainDefPtr def = NULL; char *ret = NULL; virConfPtr conf = NULL; GET_PRIVATE(conn); +virCheckFlags(0, NULL); + if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) { xenUnifiedError(VIR_ERR_INVALID_ARG, @@ -1766,11 +1770,13 @@ xenUnifiedDomainInterfaceStats (virDomainPtr dom, const char *path, static int xenUnifiedDomainBlockPeek (virDomainPtr dom, const char *path, unsigned long long offset, size_t size, - void *buffer, unsigned int flags ATTRIBUTE_UNUSED) + void *buffer, unsigned int flags) { int r; GET_PRIVATE (dom-conn); +virCheckFlags(0, -1); + if (priv-opened[XEN_UNIFIED_XEND_OFFSET]) { r = xenDaemonDomainBlockPeek (dom, path, offset, size, buffer); if (r != -2) return r; diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c index a92b743..543dfb1 100644 --- a/src/xen/xen_hypervisor.c +++ b/src/xen/xen_hypervisor.c @@ -2201,11 +2201,13 @@ xenHypervisorInit(void) virDrvOpenStatus xenHypervisorOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags ATTRIBUTE_UNUSED) + unsigned int flags) { int ret; xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn-privateData; +virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); + if (initialized == 0) if (xenHypervisorInit() == -1) return -1; @@ -3272,11 +3274,13 @@ int xenHypervisorGetDomainState(virDomainPtr domain, int *state, int *reason, -unsigned int flags ATTRIBUTE_UNUSED) +unsigned int flags) { xenUnifiedPrivatePtr priv = domain-conn-privateData; virDomainInfo info; +virCheckFlags(0, -1); + if (domain-conn == NULL) return -1; diff --git a/src/xen/xen_inotify.c b/src/xen/xen_inotify.c index 2d7207c..241dbc7 100644 --- a/src/xen/xen_inotify.c +++ b/src/xen/xen_inotify.c @@ -383,13 +383,15 @@ cleanup: virDrvOpenStatus xenInotifyOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags ATTRIBUTE_UNUSED) + unsigned int flags) { DIR *dh; struct dirent *ent; char *path; xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn-privateData; +virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); + if (priv-configDir) { priv-useXenConfigCache = 1; } else { diff --git