Revision bb6834cf hw/virtio.c

b/hw/virtio.c
12 12
 */
13 13

  
14 14
#include <inttypes.h>
15
#include <err.h>
16 15

  
17 16
#include "virtio.h"
18 17
#include "sysemu.h"
......
331 330
    uint16_t num_heads = vring_avail_idx(vq) - idx;
332 331

  
333 332
    /* Check it isn't doing very strange things with descriptor numbers. */
334
    if (num_heads > vq->vring.num)
335
        errx(1, "Guest moved used index from %u to %u",
336
             idx, vring_avail_idx(vq));
333
    if (num_heads > vq->vring.num) {
334
        fprintf(stderr, "Guest moved used index from %u to %u",
335
                idx, vring_avail_idx(vq));
336
        exit(1);
337
    }
337 338

  
338 339
    return num_heads;
339 340
}
......
347 348
    head = vring_avail_ring(vq, idx % vq->vring.num);
348 349

  
349 350
    /* If their number is silly, that's a fatal mistake. */
350
    if (head >= vq->vring.num)
351
        errx(1, "Guest says index %u is available", head);
351
    if (head >= vq->vring.num) {
352
        fprintf(stderr, "Guest says index %u is available", head);
353
        exit(1);
354
    }
352 355

  
353 356
    return head;
354 357
}
......
366 369
    /* Make sure compiler knows to grab that: we don't want it changing! */
367 370
    wmb();
368 371

  
369
    if (next >= vq->vring.num)
370
        errx(1, "Desc next is %u", next);
372
    if (next >= vq->vring.num) {
373
        fprintf(stderr, "Desc next is %u", next);
374
        exit(1);
375
    }
371 376

  
372 377
    return next;
373 378
}
......
386 391
        i = virtqueue_get_head(vq, idx++);
387 392
        do {
388 393
            /* If we've got too many, that implies a descriptor loop. */
389
            if (++num_bufs > vq->vring.num)
390
                errx(1, "Looped descriptor");
394
            if (++num_bufs > vq->vring.num) {
395
                fprintf(stderr, "Looped descriptor");
396
                exit(1);
397
            }
391 398

  
392 399
            if (vring_desc_flags(vq, i) & VRING_DESC_F_WRITE) {
393 400
                if (in_bytes > 0 &&
......
447 454
                                     sg->iov_len);
448 455
        }
449 456
#endif
450
        if (sg->iov_base == NULL)
451
            errx(1, "Invalid mapping\n");
457
        if (sg->iov_base == NULL) {
458
            fprintf(stderr, "Invalid mapping\n");
459
            exit(1);
460
        }
452 461

  
453 462
        /* If we've got too many, that implies a descriptor loop. */
454
        if ((elem->in_num + elem->out_num) > vq->vring.num)
455
            errx(1, "Looped descriptor");
463
        if ((elem->in_num + elem->out_num) > vq->vring.num) {
464
            fprintf(stderr, "Looped descriptor");
465
            exit(1);
466
        }
456 467
    } while ((i = virtqueue_next_desc(vq, i)) != vq->vring.num);
457 468

  
458 469
    elem->index = head;

Also available in: Unified diff