Acked-by: Christophe Fergeau <cfergeau@xxxxxxxxxx> On Tue, Jul 03, 2018 at 11:24:03AM +0100, Frediano Ziglio wrote: > Pointers to memory allocated in user space are never NULL. > The only exception can be if you explicitly map memory at zero. > There is however no reasons for such requirement and this practise > was also removed from Linux due to security reasons. > This API looks copied from a kernel environment where valid virtual > addresses can be NULL. > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > server/memslot.c | 12 ++---- > server/memslot.h | 2 +- > server/red-parse-qxl.c | 94 +++++++++++++++++------------------------ > server/red-record-qxl.c | 74 +++++++++----------------------- > server/red-worker.c | 14 +++--- > 5 files changed, 67 insertions(+), 129 deletions(-) > > diff --git a/server/memslot.c b/server/memslot.c > index a87a717b7..ede77e7a1 100644 > --- a/server/memslot.c > +++ b/server/memslot.c > @@ -86,11 +86,10 @@ unsigned long memslot_max_size_virt(RedMemSlotInfo *info, > } > > /* > - * return virtual address if successful, which may be 0. > - * returns 0 and sets error to 1 if an error condition occurs. > + * returns NULL on failure. > */ > -void* memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size, > - int group_id, int *error) > +void *memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size, > + int group_id) > { > int slot_id; > int generation; > @@ -98,10 +97,8 @@ void* memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size > > MemSlot *slot; > > - *error = 0; > if (group_id > info->num_memslots_groups) { > spice_critical("group_id too big"); > - *error = 1; > return NULL; > } > > @@ -109,7 +106,6 @@ void* memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size > if (slot_id > info->num_memslots) { > print_memslots(info); > spice_critical("slot_id %d too big, addr=%" PRIx64, slot_id, addr); > - *error = 1; > return NULL; > } > > @@ -120,7 +116,6 @@ void* memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size > print_memslots(info); > spice_critical("address generation is not valid, group_id %d, slot_id %d, gen %d, slot_gen %d\n", > group_id, slot_id, generation, slot->generation); > - *error = 1; > return NULL; > } > > @@ -128,7 +123,6 @@ void* memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size > h_virt += slot->address_delta; > > if (!memslot_validate_virt(info, h_virt, slot_id, add_size, group_id)) { > - *error = 1; > return NULL; > } > > diff --git a/server/memslot.h b/server/memslot.h > index d8d67d556..00728c4b6 100644 > --- a/server/memslot.h > +++ b/server/memslot.h > @@ -59,7 +59,7 @@ unsigned long memslot_max_size_virt(RedMemSlotInfo *info, > unsigned long virt, int slot_id, > uint32_t group_id); > void *memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size, > - int group_id, int *error); > + int group_id); > > void memslot_info_init(RedMemSlotInfo *info, > uint32_t num_groups, uint32_t num_slots, > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c > index d28c935f8..2e1f2b484 100644 > --- a/server/red-parse-qxl.c > +++ b/server/red-parse-qxl.c > @@ -120,7 +120,6 @@ static size_t red_get_data_chunks_ptr(RedMemSlotInfo *slots, int group_id, > RedDataChunk *red_prev; > uint64_t data_size = 0; > uint32_t chunk_data_size; > - int error; > QXLPHYSICAL next_chunk; > unsigned num_chunks = 0; > > @@ -143,10 +142,10 @@ static size_t red_get_data_chunks_ptr(RedMemSlotInfo *slots, int group_id, > } > > memslot_id = memslot_get_id(slots, next_chunk); > - qxl = (QXLDataChunk *)memslot_get_virt(slots, next_chunk, sizeof(*qxl), > - group_id, &error); > - if (error) > + qxl = (QXLDataChunk *)memslot_get_virt(slots, next_chunk, sizeof(*qxl), group_id); > + if (qxl == NULL) { > goto error; > + } > > /* do not waste space for empty chunks. > * This could be just a driver issue or an attempt > @@ -194,11 +193,10 @@ static size_t red_get_data_chunks(RedMemSlotInfo *slots, int group_id, > RedDataChunk *red, QXLPHYSICAL addr) > { > QXLDataChunk *qxl; > - int error; > int memslot_id = memslot_get_id(slots, addr); > > - qxl = (QXLDataChunk *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLDataChunk *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return INVALID_SIZE; > } > return red_get_data_chunks_ptr(slots, group_id, memslot_id, red, qxl); > @@ -251,10 +249,9 @@ static SpicePath *red_get_path(RedMemSlotInfo *slots, int group_id, > int n_segments; > int i; > uint32_t count; > - int error; > > - qxl = (QXLPath *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLPath *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return NULL; > } > size = red_get_data_chunks_ptr(slots, group_id, > @@ -329,11 +326,10 @@ static SpiceClipRects *red_get_clip_rects(RedMemSlotInfo *slots, int group_id, > bool free_data; > size_t size; > int i; > - int error; > uint32_t num_rects; > > - qxl = (QXLClipRects *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLClipRects *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return NULL; > } > size = red_get_data_chunks_ptr(slots, group_id, > @@ -370,12 +366,11 @@ static SpiceChunks *red_get_image_data_flat(RedMemSlotInfo *slots, int group_id, > QXLPHYSICAL addr, size_t size) > { > SpiceChunks *data; > - int error; > void *bitmap_virt; > > - bitmap_virt = memslot_get_virt(slots, addr, size, group_id, &error); > - if (error) { > - return 0; > + bitmap_virt = memslot_get_virt(slots, addr, size, group_id); > + if (bitmap_virt == NULL) { > + return NULL; > } > > data = spice_chunks_new(1); > @@ -460,15 +455,14 @@ static SpiceImage *red_get_image(RedMemSlotInfo *slots, int group_id, > SpicePalette *rp = NULL; > uint64_t bitmap_size, size; > uint8_t qxl_flags; > - int error; > QXLPHYSICAL palette; > > if (addr == 0) { > return NULL; > } > > - qxl = (QXLImage *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLImage *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return NULL; > } > red = g_new0(SpiceImage, 1); > @@ -511,8 +505,8 @@ static SpiceImage *red_get_image(RedMemSlotInfo *slots, int group_id, > QXLPalette *qp; > int i, num_ents; > qp = (QXLPalette *)memslot_get_virt(slots, palette, > - sizeof(*qp), group_id, &error); > - if (error) { > + sizeof(*qp), group_id); > + if (qp == NULL) { > goto error; > } > num_ents = qp->num_ents; > @@ -759,14 +753,13 @@ static bool get_transform(RedMemSlotInfo *slots, > SpiceTransform *dst_transform) > { > const uint32_t *t = NULL; > - int error; > > if (qxl_transform == 0) > return false; > > - t = (uint32_t *)memslot_get_virt(slots, qxl_transform, sizeof(*dst_transform), group_id, &error); > + t = (uint32_t *)memslot_get_virt(slots, qxl_transform, sizeof(*dst_transform), group_id); > > - if (!t || error) > + if (t == NULL) > return false; > > memcpy(dst_transform, t, sizeof(*dst_transform)); > @@ -824,8 +817,6 @@ static void red_put_rop3(SpiceRop3 *red) > static bool red_get_stroke_ptr(RedMemSlotInfo *slots, int group_id, > SpiceStroke *red, QXLStroke *qxl, uint32_t flags) > { > - int error; > - > red->path = red_get_path(slots, group_id, qxl->path); > if (!red->path) { > return false; > @@ -840,8 +831,8 @@ static bool red_get_stroke_ptr(RedMemSlotInfo *slots, int group_id, > red->attr.style_nseg = style_nseg; > spice_assert(qxl->attr.style); > buf = (uint8_t *)memslot_get_virt(slots, qxl->attr.style, > - style_nseg * sizeof(QXLFIXED), group_id, &error); > - if (error) { > + style_nseg * sizeof(QXLFIXED), group_id); > + if (buf == NULL) { > return false; > } > memcpy(red->attr.style, buf, style_nseg * sizeof(QXLFIXED)); > @@ -878,11 +869,10 @@ static SpiceString *red_get_string(RedMemSlotInfo *slots, int group_id, > int glyphs, i; > /* use unsigned to prevent integer overflow in multiplication below */ > unsigned int bpp = 0; > - int error; > uint16_t qxl_flags, qxl_length; > > - qxl = (QXLString *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLString *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return NULL; > } > chunk_size = red_get_data_chunks_ptr(slots, group_id, > @@ -1016,10 +1006,9 @@ static bool red_get_native_drawable(RedMemSlotInfo *slots, int group_id, > { > QXLDrawable *qxl; > int i; > - int error = 0; > > - qxl = (QXLDrawable *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLDrawable *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return false; > } > red->release_info_ext.info = &qxl->release_info; > @@ -1096,10 +1085,9 @@ static bool red_get_compat_drawable(RedMemSlotInfo *slots, int group_id, > RedDrawable *red, QXLPHYSICAL addr, uint32_t flags) > { > QXLCompatDrawable *qxl; > - int error; > > - qxl = (QXLCompatDrawable *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLCompatDrawable *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return false; > } > red->release_info_ext.info = &qxl->release_info; > @@ -1241,10 +1229,9 @@ bool red_get_update_cmd(RedMemSlotInfo *slots, int group_id, > RedUpdateCmd *red, QXLPHYSICAL addr) > { > QXLUpdateCmd *qxl; > - int error; > > - qxl = (QXLUpdateCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLUpdateCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return false; > } > red->release_info_ext.info = &qxl->release_info; > @@ -1266,7 +1253,6 @@ bool red_get_message(RedMemSlotInfo *slots, int group_id, > RedMessage *red, QXLPHYSICAL addr) > { > QXLMessage *qxl; > - int error; > int memslot_id; > unsigned long len; > uint8_t *end; > @@ -1277,8 +1263,8 @@ bool red_get_message(RedMemSlotInfo *slots, int group_id, > * luckily this is for debug logging only, > * so we can just ignore it by default. > */ > - qxl = (QXLMessage *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLMessage *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return false; > } > red->release_info_ext.info = &qxl->release_info; > @@ -1351,11 +1337,9 @@ bool red_get_surface_cmd(RedMemSlotInfo *slots, int group_id, > { > QXLSurfaceCmd *qxl; > uint64_t size; > - int error; > > - qxl = (QXLSurfaceCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > - if (error) { > + qxl = (QXLSurfaceCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return false; > } > red->release_info_ext.info = &qxl->release_info; > @@ -1379,8 +1363,8 @@ bool red_get_surface_cmd(RedMemSlotInfo *slots, int group_id, > > size = red->u.surface_create.height * abs(red->u.surface_create.stride); > red->u.surface_create.data = > - (uint8_t*)memslot_get_virt(slots, qxl->u.surface_create.data, size, group_id, &error); > - if (error) { > + (uint8_t*)memslot_get_virt(slots, qxl->u.surface_create.data, size, group_id); > + if (red->u.surface_create.data == NULL) { > return false; > } > break; > @@ -1401,10 +1385,9 @@ static bool red_get_cursor(RedMemSlotInfo *slots, int group_id, > size_t size; > uint8_t *data; > bool free_data; > - int error; > > - qxl = (QXLCursor *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLCursor *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return false; > } > > @@ -1443,10 +1426,9 @@ bool red_get_cursor_cmd(RedMemSlotInfo *slots, int group_id, > RedCursorCmd *red, QXLPHYSICAL addr) > { > QXLCursorCmd *qxl; > - int error; > > - qxl = (QXLCursorCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, &error); > - if (error) { > + qxl = (QXLCursorCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > + if (qxl == NULL) { > return false; > } > red->release_info_ext.info = &qxl->release_info; > diff --git a/server/red-record-qxl.c b/server/red-record-qxl.c > index 974963b03..d4fb5c56a 100644 > --- a/server/red-record-qxl.c > +++ b/server/red-record-qxl.c > @@ -42,10 +42,8 @@ static void hexdump_qxl(RedMemSlotInfo *slots, int group_id, > { > uint8_t *hex; > int i; > - int error; > > - hex = (uint8_t*)memslot_get_virt(slots, addr, bytes, group_id, > - &error); > + hex = (uint8_t*)memslot_get_virt(slots, addr, bytes, group_id); > for (i = 0; i < bytes; i++) { > if (0 == i % 16) { > fprintf(stderr, "%lx: ", addr+i); > @@ -144,12 +142,10 @@ static size_t red_record_data_chunks_ptr(FILE *fd, const char *prefix, > size_t data_size = qxl->data_size; > int count_chunks = 0; > QXLDataChunk *cur = qxl; > - int error; > > while (cur->next_chunk) { > cur = > - (QXLDataChunk*)memslot_get_virt(slots, cur->next_chunk, sizeof(*cur), group_id, > - &error); > + (QXLDataChunk*)memslot_get_virt(slots, cur->next_chunk, sizeof(*cur), group_id); > data_size += cur->data_size; > count_chunks++; > } > @@ -159,8 +155,7 @@ static size_t red_record_data_chunks_ptr(FILE *fd, const char *prefix, > > while (qxl->next_chunk) { > memslot_id = memslot_get_id(slots, qxl->next_chunk); > - qxl = (QXLDataChunk*)memslot_get_virt(slots, qxl->next_chunk, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLDataChunk*)memslot_get_virt(slots, qxl->next_chunk, sizeof(*qxl), group_id); > > memslot_validate_virt(slots, (intptr_t)qxl->data, memslot_id, qxl->data_size, group_id); > write_binary(fd, prefix, qxl->data_size, qxl->data); > @@ -175,10 +170,8 @@ static size_t red_record_data_chunks(FILE *fd, const char *prefix, > { > QXLDataChunk *qxl; > int memslot_id = memslot_get_id(slots, addr); > - int error; > > - qxl = (QXLDataChunk*)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLDataChunk*)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > return red_record_data_chunks_ptr(fd, prefix, slots, group_id, memslot_id, qxl); > } > > @@ -202,10 +195,8 @@ static void red_record_path(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLPHYSICAL addr) > { > QXLPath *qxl; > - int error; > > - qxl = (QXLPath *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLPath *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > red_record_data_chunks_ptr(fd, "path", slots, group_id, > memslot_get_id(slots, addr), > &qxl->chunk); > @@ -215,10 +206,8 @@ static void red_record_clip_rects(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLPHYSICAL addr) > { > QXLClipRects *qxl; > - int error; > > - qxl = (QXLClipRects *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLClipRects *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > fprintf(fd, "num_rects %d\n", qxl->num_rects); > red_record_data_chunks_ptr(fd, "clip_rects", slots, group_id, > memslot_get_id(slots, addr), > @@ -229,11 +218,8 @@ static void red_record_virt_data_flat(FILE *fd, const char *prefix, > RedMemSlotInfo *slots, int group_id, > QXLPHYSICAL addr, size_t size) > { > - int error; > - > write_binary(fd, prefix, > - size, (uint8_t*)memslot_get_virt(slots, addr, size, group_id, > - &error)); > + size, (uint8_t*)memslot_get_virt(slots, addr, size, group_id)); > } > > static void red_record_image_data_flat(FILE *fd, RedMemSlotInfo *slots, int group_id, > @@ -255,15 +241,13 @@ static void red_record_image(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLImage *qxl; > size_t bitmap_size, size; > uint8_t qxl_flags; > - int error; > > fprintf(fd, "image %d\n", addr ? 1 : 0); > if (addr == 0) { > return; > } > > - qxl = (QXLImage *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLImage *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > fprintf(fd, "descriptor.id %"PRIu64"\n", qxl->descriptor.id); > fprintf(fd, "descriptor.type %d\n", qxl->descriptor.type); > fprintf(fd, "descriptor.flags %d\n", qxl->descriptor.flags); > @@ -283,7 +267,7 @@ static void red_record_image(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLPalette *qp; > int i, num_ents; > qp = (QXLPalette *)memslot_get_virt(slots, qxl->bitmap.palette, > - sizeof(*qp), group_id, &error); > + sizeof(*qp), group_id); > num_ents = qp->num_ents; > fprintf(fd, "qp.num_ents %d\n", qp->num_ents); > memslot_validate_virt(slots, (intptr_t)qp->ents, > @@ -425,8 +409,6 @@ static void red_record_rop3_ptr(FILE *fd, RedMemSlotInfo *slots, int group_id, > static void red_record_stroke_ptr(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLStroke *qxl, uint32_t flags) > { > - int error; > - > red_record_path(fd, slots, group_id, qxl->path); > fprintf(fd, "attr.flags %d\n", qxl->attr.flags); > if (qxl->attr.flags & SPICE_LINE_FLAGS_STYLED) { > @@ -436,8 +418,7 @@ static void red_record_stroke_ptr(FILE *fd, RedMemSlotInfo *slots, int group_id, > fprintf(fd, "attr.style_nseg %d\n", qxl->attr.style_nseg); > spice_assert(qxl->attr.style); > buf = (uint8_t *)memslot_get_virt(slots, qxl->attr.style, > - style_nseg * sizeof(QXLFIXED), group_id, > - &error); > + style_nseg * sizeof(QXLFIXED), group_id); > write_binary(fd, "style", style_nseg * sizeof(QXLFIXED), buf); > } > red_record_brush_ptr(fd, slots, group_id, &qxl->brush, flags); > @@ -450,10 +431,8 @@ static void red_record_string(FILE *fd, RedMemSlotInfo *slots, int group_id, > { > QXLString *qxl; > size_t chunk_size; > - int error; > > - qxl = (QXLString *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLString *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > fprintf(fd, "data_size %d\n", qxl->data_size); > fprintf(fd, "length %d\n", qxl->length); > fprintf(fd, "flags %d\n", qxl->flags); > @@ -528,10 +507,8 @@ static void red_record_native_drawable(FILE *fd, RedMemSlotInfo *slots, int grou > { > QXLDrawable *qxl; > int i; > - int error; > > - qxl = (QXLDrawable *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLDrawable *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > > red_record_rect_ptr(fd, "bbox", &qxl->bbox); > red_record_clip_ptr(fd, slots, group_id, &qxl->clip); > @@ -604,10 +581,8 @@ static void red_record_compat_drawable(FILE *fd, RedMemSlotInfo *slots, int grou > QXLPHYSICAL addr, uint32_t flags) > { > QXLCompatDrawable *qxl; > - int error; > > - qxl = (QXLCompatDrawable *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLCompatDrawable *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > > red_record_rect_ptr(fd, "bbox", &qxl->bbox); > red_record_clip_ptr(fd, slots, group_id, &qxl->clip); > @@ -683,10 +658,8 @@ static void red_record_update_cmd(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLPHYSICAL addr) > { > QXLUpdateCmd *qxl; > - int error; > > - qxl = (QXLUpdateCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLUpdateCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > > fprintf(fd, "update\n"); > red_record_rect_ptr(fd, "area", &qxl->area); > @@ -698,7 +671,6 @@ static void red_record_message(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLPHYSICAL addr) > { > QXLMessage *qxl; > - int error; > > /* > * security alert: > @@ -706,8 +678,7 @@ static void red_record_message(FILE *fd, RedMemSlotInfo *slots, int group_id, > * luckily this is for debug logging only, > * so we can just ignore it by default. > */ > - qxl = (QXLMessage *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLMessage *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > write_binary(fd, "message", strlen((char*)qxl->data), (uint8_t*)qxl->data); > } > > @@ -716,10 +687,8 @@ static void red_record_surface_cmd(FILE *fd, RedMemSlotInfo *slots, int group_id > { > QXLSurfaceCmd *qxl; > size_t size; > - int error; > > - qxl = (QXLSurfaceCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLSurfaceCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > > fprintf(fd, "surface_cmd\n"); > fprintf(fd, "surface_id %d\n", qxl->surface_id); > @@ -735,8 +704,7 @@ static void red_record_surface_cmd(FILE *fd, RedMemSlotInfo *slots, int group_id > size = qxl->u.surface_create.height * abs(qxl->u.surface_create.stride); > if ((qxl->flags & QXL_SURF_FLAG_KEEP_DATA) != 0) { > write_binary(fd, "data", size, > - (uint8_t*)memslot_get_virt(slots, qxl->u.surface_create.data, size, group_id, > - &error)); > + (uint8_t*)memslot_get_virt(slots, qxl->u.surface_create.data, size, group_id)); > } > break; > } > @@ -746,10 +714,8 @@ static void red_record_cursor(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLPHYSICAL addr) > { > QXLCursor *qxl; > - int error; > > - qxl = (QXLCursor *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLCursor *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > > fprintf(fd, "header.unique %"PRIu64"\n", qxl->header.unique); > fprintf(fd, "header.type %d\n", qxl->header.type); > @@ -768,10 +734,8 @@ static void red_record_cursor_cmd(FILE *fd, RedMemSlotInfo *slots, int group_id, > QXLPHYSICAL addr) > { > QXLCursorCmd *qxl; > - int error; > > - qxl = (QXLCursorCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id, > - &error); > + qxl = (QXLCursorCmd *)memslot_get_virt(slots, addr, sizeof(*qxl), group_id); > > fprintf(fd, "cursor_cmd\n"); > fprintf(fd, "type %d\n", qxl->type); > diff --git a/server/red-worker.c b/server/red-worker.c > index 21ae6d774..721b1c843 100644 > --- a/server/red-worker.c > +++ b/server/red-worker.c > @@ -486,7 +486,6 @@ static void dev_create_primary_surface(RedWorker *worker, uint32_t surface_id, > { > DisplayChannel *display = worker->display_channel; > uint8_t *line_0; > - int error; > > spice_debug("trace"); > spice_warn_if_fail(surface_id == 0); > @@ -503,8 +502,8 @@ static void dev_create_primary_surface(RedWorker *worker, uint32_t surface_id, > > line_0 = (uint8_t*)memslot_get_virt(&worker->mem_slots, surface.mem, > surface.height * abs(surface.stride), > - surface.group_id, &error); > - if (error) { > + surface.group_id); > + if (line_0 == NULL) { > return; > } > if (worker->record) { > @@ -767,14 +766,13 @@ static void handle_dev_monitors_config_async(void *opaque, void *payload) > { > RedWorkerMessageMonitorsConfigAsync *msg = payload; > RedWorker *worker = opaque; > - int error; > uint16_t count, max_allowed; > QXLMonitorsConfig *dev_monitors_config = > (QXLMonitorsConfig*)memslot_get_virt(&worker->mem_slots, msg->monitors_config, > qxl_monitors_config_size(1), > - msg->group_id, &error); > + msg->group_id); > > - if (error) { > + if (dev_monitors_config == NULL) { > /* TODO: raise guest bug (requires added QXL interface) */ > goto async_complete; > } > @@ -796,8 +794,8 @@ static void handle_dev_monitors_config_async(void *opaque, void *payload) > dev_monitors_config = > (QXLMonitorsConfig*)memslot_get_virt(&worker->mem_slots, msg->monitors_config, > qxl_monitors_config_size(count), > - msg->group_id, &error); > - if (error) { > + msg->group_id); > + if (dev_monitors_config == NULL) { > /* TODO: raise guest bug (requires added QXL interface) */ > goto async_complete; > } > -- > 2.17.1 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel