Previous patch can not pass build because of
missing virNetServerClientCheckFilterExist stated in libvirt_remote.syms

LanceLiu <liu.lance...@gmail.com> 于2019年11月25日周一 下午3:34写道:

> ---
>  src/libvirt_remote.syms           |  1 +
>  src/remote/remote_daemon_stream.c | 10 +++++++++-
>  src/rpc/virnetserverclient.c      | 12 ++++++++++++
>  src/rpc/virnetserverclient.h      |  2 ++
>  4 files changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms
> index 0493467..c32e234 100644
> --- a/src/libvirt_remote.syms
> +++ b/src/libvirt_remote.syms
> @@ -173,6 +173,7 @@ virNetServerClientPreExecRestart;
>  virNetServerClientRemoteAddrStringSASL;
>  virNetServerClientRemoteAddrStringURI;
>  virNetServerClientRemoveFilter;
> +virNetServerClientCheckFilterExist;
>  virNetServerClientSendMessage;
>  virNetServerClientSetAuthLocked;
>  virNetServerClientSetAuthPendingLocked;
> diff --git a/src/remote/remote_daemon_stream.c
> b/src/remote/remote_daemon_stream.c
> index 82cadb6..de0dca3 100644
> --- a/src/remote/remote_daemon_stream.c
> +++ b/src/remote/remote_daemon_stream.c
> @@ -292,10 +292,18 @@ daemonStreamFilter(virNetServerClientPtr client,
>  {
>      daemonClientStream *stream = opaque;
>      int ret = 0;
> +    daemonClientPrivatePtr priv = NULL;
> +    int filter_id = stream->filterID;
>
>      virObjectUnlock(client);
> +    priv = virNetServerClientGetPrivateData(client);
>      virMutexLock(&stream->priv->lock);
>      virObjectLock(client);
> +    if (!virNetServerClientCheckFilterExist(client, filter_id)) {
> +        VIR_WARN("this daemon stream filter: %d have been deleted!",
> filter_id);
> +        ret = -1;
> +        goto cleanup;
> +    }
>
>      if (msg->header.type != VIR_NET_STREAM &&
>          msg->header.type != VIR_NET_STREAM_HOLE)
> @@ -317,7 +325,7 @@ daemonStreamFilter(virNetServerClientPtr client,
>      ret = 1;
>
>   cleanup:
> -    virMutexUnlock(&stream->priv->lock);
> +    virMutexUnlock(&priv->lock);
>      return ret;
>  }
>
> diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
> index 67b3bf9..f80f493 100644
> --- a/src/rpc/virnetserverclient.c
> +++ b/src/rpc/virnetserverclient.c
> @@ -287,6 +287,18 @@ void
> virNetServerClientRemoveFilter(virNetServerClientPtr client,
>      virObjectUnlock(client);
>  }
>
> +int virNetServerClientCheckFilterExist(virNetServerClientPtr client,
> +                                       int filterID)
> +{
> +    virNetServerClientFilterPtr tmp;
> +
> +    tmp = client->filters;
> +    while(tmp && tmp->id != filterID) {
> +        tmp = tmp->next;
> +    }
> +
> +    return (tmp != NULL);
> +}
>
>  /* Check the client's access. */
>  static int
> diff --git a/src/rpc/virnetserverclient.h b/src/rpc/virnetserverclient.h
> index 7a3061d..85fda39 100644
> --- a/src/rpc/virnetserverclient.h
> +++ b/src/rpc/virnetserverclient.h
> @@ -93,6 +93,8 @@ int virNetServerClientAddFilter(virNetServerClientPtr
> client,
>
>  void virNetServerClientRemoveFilter(virNetServerClientPtr client,
>                                      int filterID);
> +int virNetServerClientCheckFilterExist(virNetServerClientPtr client,
> +                                       int filterID);
>
>  int virNetServerClientGetAuth(virNetServerClientPtr client);
>  void virNetServerClientSetAuthLocked(virNetServerClientPtr client, int
> auth);
> --
> 1.8.3.1
>
>
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to