[libvirt] [PATCH 19/20] xen: reject unknown flags

Daniel P. Berrange berrange at redhat.com
Thu Jul 7 09:29:45 UTC 2011


On Wed, Jul 06, 2011 at 05:24:02PM -0600, Eric Blake wrote:
> * 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/xend_internal.c (xenDaemonOpen, xenDaemonDomainReboot)
> (xenDaemonDomainCoreDump, xenDaemonDomainGetState)
> (xenDaemonDomainMigratePrepare): Likewise.
> * src/xen/xm_internal.c (xenXMOpen, xenXMDomainGetState):
> Likewise.
> * src/xen/xs_internal.c (xenStoreOpen, xenStoreDomainGetState)
> (xenStoreDomainReboot): Likewise.
> ---
>  src/xen/xen_driver.c     |   12 +++++++++---
>  src/xen/xen_hypervisor.c |    8 ++++++--
>  src/xen/xen_inotify.c    |    4 +++-
>  src/xen/xend_internal.c  |   20 +++++++++++++++-----
>  src/xen/xm_internal.c    |    8 ++++++--
>  src/xen/xs_internal.c    |   12 +++++++++---
>  6 files changed, 48 insertions(+), 16 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..7636bea 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(0, 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..0b6883f 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(0, VIR_DRV_OPEN_ERROR);
> +
>      if (priv->configDir) {
>          priv->useXenConfigCache = 1;
>      } else {
> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
> index 6c2f051..8a4c6a9 100644
> --- a/src/xen/xend_internal.c
> +++ b/src/xen/xend_internal.c
> @@ -1323,11 +1323,13 @@ error:
>  virDrvOpenStatus
>  xenDaemonOpen(virConnectPtr conn,
>                virConnectAuthPtr auth ATTRIBUTE_UNUSED,
> -              unsigned int flags ATTRIBUTE_UNUSED)
> +              unsigned int flags)
>  {
>      char *port = NULL;
>      int ret = VIR_DRV_OPEN_ERROR;
> 
> +    virCheckFlags(0, VIR_DRV_OPEN_ERROR);
> +
>      /* Switch on the scheme, which we expect to be NULL (file),
>       * "http" or "xen".
>       */
> @@ -1488,8 +1490,10 @@ xenDaemonDomainShutdown(virDomainPtr domain)
>   * Returns 0 in case of success, -1 (with errno) in case of error.
>   */
>  int
> -xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
> +xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags)
>  {
> +    virCheckFlags(0, -1);
> +
>      if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
>          virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
>          return(-1);
> @@ -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__);
> @@ -1921,11 +1927,13 @@ int
>  xenDaemonDomainGetState(virDomainPtr domain,
>                          int *state,
>                          int *reason,
> -                        unsigned int flags ATTRIBUTE_UNUSED)
> +                        unsigned int flags)
>  {
>      xenUnifiedPrivatePtr priv = domain->conn->privateData;
>      struct sexpr *root;
> 
> +    virCheckFlags(0, -1);
> +
>      if (domain->id < 0 && priv->xendConfigVersion < 3)
>          return -1;
> 
> @@ -3151,10 +3159,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.
> diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
> index 01b9c4e..c985044 100644
> --- a/src/xen/xm_internal.c
> +++ b/src/xen/xm_internal.c
> @@ -442,10 +442,12 @@ int xenXMConfigCacheRefresh (virConnectPtr conn) {
>  virDrvOpenStatus
>  xenXMOpen (virConnectPtr conn,
>             virConnectAuthPtr auth ATTRIBUTE_UNUSED,
> -           unsigned int flags ATTRIBUTE_UNUSED)
> +           unsigned int flags)
>  {
>      xenUnifiedPrivatePtr priv = conn->privateData;
> 
> +    virCheckFlags(0, VIR_DRV_OPEN_ERROR);
> +
>      priv->configDir = XM_CONFIG_DIR;
> 
>      priv->configCache = virHashCreate(50, xenXMConfigFree);
> @@ -485,8 +487,10 @@ int
>  xenXMDomainGetState(virDomainPtr domain,
>                      int *state,
>                      int *reason,
> -                    unsigned int flags ATTRIBUTE_UNUSED)
> +                    unsigned int flags)
>  {
> +    virCheckFlags(0, -1);
> +
>      if (domain->id != -1)
>          return -1;
> 
> diff --git a/src/xen/xs_internal.c b/src/xen/xs_internal.c
> index 48e450a..53d1e45 100644
> --- a/src/xen/xs_internal.c
> +++ b/src/xen/xs_internal.c
> @@ -267,10 +267,12 @@ virDomainGetVMInfo(virDomainPtr domain, const char *vm, const char *name)
>  virDrvOpenStatus
>  xenStoreOpen(virConnectPtr conn,
>               virConnectAuthPtr auth ATTRIBUTE_UNUSED,
> -             unsigned int flags ATTRIBUTE_UNUSED)
> +             unsigned int flags)
>  {
>      xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
> 
> +    virCheckFlags(0, VIR_DRV_OPEN_ERROR);
> +
>      if (flags & VIR_CONNECT_RO)
>          priv->xshandle = xs_daemon_open_readonly();
>      else
> @@ -461,10 +463,12 @@ int
>  xenStoreDomainGetState(virDomainPtr domain,
>                         int *state,
>                         int *reason,
> -                       unsigned int flags ATTRIBUTE_UNUSED)
> +                       unsigned int flags)
>  {
>      char *running;
> 
> +    virCheckFlags(0, -1);
> +
>      if (domain->id == -1)
>          return -1;
> 
> @@ -778,11 +782,13 @@ xenStoreDomainShutdown(virDomainPtr domain)
>   * Returns 0 in case of success, -1 in case of error.
>   */
>  int
> -xenStoreDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
> +xenStoreDomainReboot(virDomainPtr domain, unsigned int flags)
>  {
>      int ret;
>      xenUnifiedPrivatePtr priv;
> 
> +    virCheckFlags(0, -1);
> +
>      if ((domain == NULL) || (domain->conn == NULL)) {
>          virXenStoreError(VIR_ERR_INVALID_ARG, __FUNCTION__);
>          return(-1);

ACK

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list