Re: [PATCH spice-server v3] memslot: Remove error parameter from memslot_get_virt

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Virtualization]     [Linux Virtualization]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]