diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2013-10-04 20:59:26 +0200 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@gmail.com> | 2013-10-07 16:33:21 +0200 |
commit | 1f12fa72cc62fe1dcf213a03d9fb446585469c0c (patch) | |
tree | ef88961ab6920de6a4187986266a80f5cbdd13f4 | |
parent | 3bb7db9c5d2e30e073adf5bd6878b121f72b8aae (diff) | |
download | spice-1f12fa72cc62fe1dcf213a03d9fb446585469c0c.tar.gz spice-1f12fa72cc62fe1dcf213a03d9fb446585469c0c.tar.xz spice-1f12fa72cc62fe1dcf213a03d9fb446585469c0c.zip |
server: plug some leaks on error
Plug what looks like memory leaks, that could be potentially be
triggered by a misbehaving guest.
-rw-r--r-- | server/red_worker.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/server/red_worker.c b/server/red_worker.c index f5a5553d..8f7a1fc7 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -4949,10 +4949,13 @@ static int red_process_cursor(RedWorker *worker, uint32_t max_pipe_size, int *ri case QXL_CMD_CURSOR: { RedCursorCmd *cursor = spice_new0(RedCursorCmd, 1); - if (!red_get_cursor_cmd(&worker->mem_slots, ext_cmd.group_id, + if (red_get_cursor_cmd(&worker->mem_slots, ext_cmd.group_id, cursor, ext_cmd.cmd.data)) { - qxl_process_cursor(worker, cursor, ext_cmd.group_id); + free(cursor); + break; } + + qxl_process_cursor(worker, cursor, ext_cmd.group_id); break; } default: @@ -5058,6 +5061,7 @@ static int red_process_commands(RedWorker *worker, uint32_t max_pipe_size, int * if (red_get_surface_cmd(&worker->mem_slots, ext_cmd.group_id, surface, ext_cmd.cmd.data)) { + free(surface); break; } red_process_surface(worker, surface, ext_cmd.group_id, FALSE); @@ -11647,6 +11651,7 @@ void handle_dev_loadvm_commands(void *opaque, void *payload) /* XXX allow failure in loadvm? */ spice_warning("failed loadvm command type (%d)", ext[i].cmd.type); + free(cursor_cmd); continue; } qxl_process_cursor(worker, cursor_cmd, ext[i].group_id); |