[Spice-devel] [PATCH win-vdagent] Don't exit when receiving unknown messages
Jonathon Jongsma
jjongsma at redhat.com
Thu Feb 28 15:20:53 UTC 2019
On Thu, 2019-02-28 at 03:31 -0500, Frediano Ziglio wrote:
> >
> > In 8251fa25, a check on the minimum size of a message was
> > introduced.
> > For unsupported messages, the vdagent simply exited. This makes it
> > difficult to extend the vdagent protocol without breaking old
>
> The protocol is using capabilities, there should not be
> unsupported messages.
>
> > installations. Instead, just print a warning indicating that an
> > unsupported message was received and ignore it.
> >
>
> If you want to print a warning it means that it's not correct,
> this is another indication that it's wrong.
>
> > Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
> > ---
> > vdagent/vdagent.cpp | 3 +--
> > 1 file changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp
> > index 89019bb..177e663 100644
> > --- a/vdagent/vdagent.cpp
> > +++ b/vdagent/vdagent.cpp
> > @@ -1288,8 +1288,7 @@ void
> > VDAgent::dispatch_message(VDAgentMessage* msg,
> > uint32_t port)
> > break;
> > }
> > if (min_size < 0) {
> > - vd_printf("Unsupported message type %u size %u", msg-
> > >type,
> > msg->size);
> > - _running = false;
> > + vd_printf("Unsupported message type %u size %u, ignoring",
> > msg->type, msg->size);
> > return;
> > }
> > if (msg->size < (unsigned) min_size) {
>
> RHEL 8 has 8251fa25 patch, should the users be forced to update
> the guests?
> If we want to change the protocol to allow unsupported message we
> should first change the protocol specification, this is not a
> fix, it's a workaround for a wrong/incomplete implementation on
> the server side.
> I prefer a proper fix than a workaround and this is not
> fixing already installed guests.
>
> Frediano
Well, I didn't necessarily mean that this is a full solution, but I
think it is still an improvement. In fact, this was the behavior that
vdagent-win had before commit 8251fa25. For example, later on in this
function when we're handling the messages, there is the following code:
default:
vd_printf("Unsupported message type %u size %u", msg->type, msg->size);
}
The agent does not exit due to an unsupported message. It just prints a
warning.
In addition, this is the same behavior as the linux vdagent. In linux
src/vdagentd/vdagentd.c function virtio_port_read_complete():
default:
g_warn_if_reached();
}
return 0;
So: Linux vdagent prints a warning, but the vdagent does not exit.
You say above that my change requires a change to the protocol, but in
fact this is how both vdagents worked for years until commit 8251fa25
made the windows agent exit when it encounters unsupported messages. So
I would argue that patch 8251fa25 actually introduced a regression in
RHEL 8.0.
Jonathon
More information about the Spice-devel
mailing list