ping On Thu, Nov 14, 2013 at 5:03 PM, Marc-André Lureau <marcandre.lureau@xxxxxxxxx> wrote: > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> > > Do not send clipboard data bigger than last received > VDAgentMaxClipboard. > > There is no need to further limit at the session agent, since it is > already OOM safe, and since marhsalling/sending is local, that shouldn't > make any stability or speed difference that deserves the added > complexity. > --- > src/vdagentd.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/src/vdagentd.c b/src/vdagentd.c > index 2eb97cb..1098fb6 100644 > --- a/src/vdagentd.c > +++ b/src/vdagentd.c > @@ -74,6 +74,7 @@ static int agent_owns_clipboard[256] = { 0, }; > static int quit = 0; > static int retval = 0; > static int client_connected = 0; > +static int max_clipboard = -1; > > /* utility functions */ > /* vdagentd <-> spice-client communication handling */ > @@ -98,6 +99,7 @@ static void send_capabilities(struct vdagent_virtio_port *vport, > VD_AGENT_SET_CAPABILITY(caps->caps, VD_AGENT_CAP_CLIPBOARD_SELECTION); > VD_AGENT_SET_CAPABILITY(caps->caps, VD_AGENT_CAP_SPARSE_MONITORS_CONFIG); > VD_AGENT_SET_CAPABILITY(caps->caps, VD_AGENT_CAP_GUEST_LINEEND_LF); > + VD_AGENT_SET_CAPABILITY(caps->caps, VD_AGENT_CAP_MAX_CLIPBOARD); > > vdagent_virtio_port_write(vport, VDP_CLIENT_PORT, > VD_AGENT_ANNOUNCE_CAPABILITIES, 0, > @@ -369,6 +371,13 @@ int virtio_port_read_complete( > vdagent_virtio_port_reset(vport, VDP_CLIENT_PORT); > do_client_disconnect(); > break; > + case VD_AGENT_MAX_CLIPBOARD: > + if (message_header->size != sizeof(VDAgentMaxClipboard)) > + goto size_error; > + VDAgentMaxClipboard *msg = (VDAgentMaxClipboard *)data; > + syslog(LOG_DEBUG, "Set max clipboard: %d", msg->max); > + max_clipboard = msg->max; > + break; > default: > syslog(LOG_WARNING, "unknown message type %d, ignoring", > message_header->type); > @@ -453,6 +462,12 @@ int do_agent_clipboard(struct udscs_connection *conn, > case VDAGENTD_CLIPBOARD_DATA: > msg_type = VD_AGENT_CLIPBOARD; > data_type = header->arg2; > + if (max_clipboard != -1 && size > max_clipboard) { > + syslog(LOG_WARNING, "clipboard is too large (%d > %d), discarding", > + size, max_clipboard); > + virtio_write_clipboard(selection, msg_type, data_type, NULL, 0); > + return 0; > + } > break; > case VDAGENTD_CLIPBOARD_RELEASE: > msg_type = VD_AGENT_CLIPBOARD_RELEASE; > -- > 1.8.3.1 > -- Marc-André Lureau _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel