Re: [libvirt] [PATCHv2 18/27] xen: reject unknown flags

2011-07-14 Thread Matthias Bolte
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

2011-07-14 Thread Eric Blake
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-07-13 Thread Matthias Bolte
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

2011-07-08 Thread Eric Blake
* 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