The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=ed7216843133c9d6748251b5e180ee90410131f0

commit ed7216843133c9d6748251b5e180ee90410131f0
Author:     Mark Johnston <[email protected]>
AuthorDate: 2022-10-23 14:32:45 +0000
Commit:     Mark Johnston <[email protected]>
CommitDate: 2022-10-25 15:16:57 +0000

    bhyve: Address some signed/unsigned comparison warnings
    
    MFC after:      1 week
---
 sys/amd64/vmm/vmm_instruction_emul.c |  4 ++--
 usr.sbin/bhyve/bhyverun.c            |  2 +-
 usr.sbin/bhyve/block_if.c            |  6 ++---
 usr.sbin/bhyve/fwctl.c               |  4 ++--
 usr.sbin/bhyve/gdb.c                 | 10 ++++----
 usr.sbin/bhyve/net_backends.c        |  6 ++---
 usr.sbin/bhyve/pci_e82545.c          |  2 +-
 usr.sbin/bhyve/pci_emul.c            |  9 +++++---
 usr.sbin/bhyve/pci_hda.c             |  5 ++--
 usr.sbin/bhyve/pci_irq.c             | 44 ++++++++++++++++++++----------------
 usr.sbin/bhyve/pci_nvme.c            |  2 +-
 usr.sbin/bhyve/pci_passthru.c        |  4 ++--
 usr.sbin/bhyve/pci_virtio_input.c    |  2 +-
 usr.sbin/bhyve/pci_xhci.c            |  5 ++--
 usr.sbin/bhyve/snapshot.c            | 13 +++++++----
 usr.sbin/bhyve/task_switch.c         |  2 +-
 usr.sbin/bhyve/uart_emul.c           |  2 +-
 usr.sbin/bhyve/virtio.c              |  2 +-
 18 files changed, 68 insertions(+), 56 deletions(-)

diff --git a/sys/amd64/vmm/vmm_instruction_emul.c 
b/sys/amd64/vmm/vmm_instruction_emul.c
index 0474147e68ff..3b48eee2d8ed 100644
--- a/sys/amd64/vmm/vmm_instruction_emul.c
+++ b/sys/amd64/vmm/vmm_instruction_emul.c
@@ -1330,8 +1330,8 @@ emulate_bextr(void *vm, int vcpuid, uint64_t gpa, struct 
vie *vie,
     mem_region_write_t memwrite __unused, void *arg)
 {
        uint64_t src1, src2, dst, rflags;
-       unsigned start, len;
-       int error, size;
+       unsigned start, len, size;
+       int error;
 
        size = vie->opsize;
        error = EINVAL;
diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c
index 6b0b61cc897c..4abdf8fe301e 100644
--- a/usr.sbin/bhyve/bhyverun.c
+++ b/usr.sbin/bhyve/bhyverun.c
@@ -372,7 +372,7 @@ calc_topology(void)
                    (uintmax_t)ncpus);
 
        if (explicit_cpus) {
-               if (guest_ncpus != ncpus)
+               if (guest_ncpus != (int)ncpus)
                        errx(4, "Topology (%d sockets, %d cores, %d threads) "
                            "does not match %d vCPUs",
                            cpu_sockets, cpu_cores, cpu_threads,
diff --git a/usr.sbin/bhyve/block_if.c b/usr.sbin/bhyve/block_if.c
index c8454a679bcd..53a892cbfa3a 100644
--- a/usr.sbin/bhyve/block_if.c
+++ b/usr.sbin/bhyve/block_if.c
@@ -916,10 +916,10 @@ blockif_chs(struct blockif_ctxt *bc, uint16_t *c, uint8_t 
*h, uint8_t *s)
        sectors = bc->bc_size / bc->bc_sectsz;
 
        /* Clamp the size to the largest possible with CHS */
-       if (sectors > 65535UL*16*255)
-               sectors = 65535UL*16*255;
+       if (sectors > 65535L * 16 * 255)
+               sectors = 65535L * 16 * 255;
 
-       if (sectors >= 65536UL*16*63) {
+       if (sectors >= 65536L * 16 * 63) {
                secpt = 255;
                heads = 16;
                hcyl = sectors / secpt;
diff --git a/usr.sbin/bhyve/fwctl.c b/usr.sbin/bhyve/fwctl.c
index b4bfecb2bedd..46010513b66a 100644
--- a/usr.sbin/bhyve/fwctl.c
+++ b/usr.sbin/bhyve/fwctl.c
@@ -95,7 +95,7 @@ fwctl_send_rest(uint32_t *data, size_t len)
                uint32_t w;
        } u;
        uint8_t *cdata;
-       int i;
+       size_t i;
 
        cdata = (uint8_t *) data;
        u.w = 0;
@@ -427,7 +427,7 @@ fwctl_response(uint32_t *retval)
                remlen = rinfo.resp_size - rinfo.resp_off;
                dp = (uint32_t *)
                    ((uint8_t *)rinfo.resp_biov->iov_base + rinfo.resp_off);
-               if (remlen >= sizeof(uint32_t)) {
+               if (remlen >= (ssize_t)sizeof(uint32_t)) {
                        *retval = *dp;
                } else if (remlen > 0) {
                        *retval = fwctl_send_rest(dp, remlen);
diff --git a/usr.sbin/bhyve/gdb.c b/usr.sbin/bhyve/gdb.c
index cf0d5995a5d3..6368d5cc79a9 100644
--- a/usr.sbin/bhyve/gdb.c
+++ b/usr.sbin/bhyve/gdb.c
@@ -958,7 +958,6 @@ static void
 gdb_read_regs(void)
 {
        uint64_t regvals[nitems(gdb_regset)];
-       int i;
 
        if (vm_get_register_set(ctx, cur_vcpu, nitems(gdb_regset),
            gdb_regset, regvals) == -1) {
@@ -966,7 +965,7 @@ gdb_read_regs(void)
                return;
        }
        start_packet();
-       for (i = 0; i < nitems(regvals); i++)
+       for (size_t i = 0; i < nitems(regvals); i++)
                append_unsigned_native(regvals[i], gdb_regsize[i]);
        finish_packet();
 }
@@ -1706,13 +1705,16 @@ check_command(int fd)
 static void
 gdb_readable(int fd, enum ev_type event __unused, void *arg __unused)
 {
+       size_t pending;
        ssize_t nread;
-       int pending;
+       int n;
 
-       if (ioctl(fd, FIONREAD, &pending) == -1) {
+       if (ioctl(fd, FIONREAD, &n) == -1) {
                warn("FIONREAD on GDB socket");
                return;
        }
+       assert(n >= 0);
+       pending = n;
 
        /*
         * 'pending' might be zero due to EOF.  We need to call read
diff --git a/usr.sbin/bhyve/net_backends.c b/usr.sbin/bhyve/net_backends.c
index b5d320187088..4e80cd885e52 100644
--- a/usr.sbin/bhyve/net_backends.c
+++ b/usr.sbin/bhyve/net_backends.c
@@ -227,7 +227,7 @@ tap_init(struct net_backend *be, const char *devname,
        int opt = 1;
 #if defined(INET6) || defined(INET)
        struct ifreq ifrq;
-       int i, s;
+       int s;
 #endif
 #ifndef WITHOUT_CAPSICUM
        cap_rights_t rights;
@@ -268,7 +268,7 @@ tap_init(struct net_backend *be, const char *devname,
        }
 
        s = -1;
-       for (i = 0; s == -1 && i < nitems(pf_list); i++)
+       for (size_t i = 0; s == -1 && i < nitems(pf_list); i++)
                s = socket(pf_list[i], SOCK_DGRAM, 0);
        if (s == -1) {
                WPRINTF(("Could open socket"));
@@ -649,7 +649,7 @@ netmap_set_vnet_hdr_len(struct net_backend *be, int 
vnet_hdr_len)
 static int
 netmap_has_vnet_hdr_len(struct net_backend *be, unsigned vnet_hdr_len)
 {
-       int prev_hdr_len = be->be_vnet_hdr_len;
+       unsigned prev_hdr_len = be->be_vnet_hdr_len;
        int ret;
 
        if (vnet_hdr_len == prev_hdr_len) {
diff --git a/usr.sbin/bhyve/pci_e82545.c b/usr.sbin/bhyve/pci_e82545.c
index 22127eb2208a..21e01b22ec4b 100644
--- a/usr.sbin/bhyve/pci_e82545.c
+++ b/usr.sbin/bhyve/pci_e82545.c
@@ -2442,7 +2442,7 @@ e82545_snapshot(struct vm_snapshot_meta *meta)
                true, meta, ret, done);
 
        /* L2 frame acceptance */
-       for (i = 0; i < nitems(sc->esc_uni); i++) {
+       for (i = 0; i < (int)nitems(sc->esc_uni); i++) {
                SNAPSHOT_VAR_OR_LEAVE(sc->esc_uni[i].eu_valid, meta, ret, done);
                SNAPSHOT_VAR_OR_LEAVE(sc->esc_uni[i].eu_addrsel, meta, ret, 
done);
                SNAPSHOT_VAR_OR_LEAVE(sc->esc_uni[i].eu_eth, meta, ret, done);
diff --git a/usr.sbin/bhyve/pci_emul.c b/usr.sbin/bhyve/pci_emul.c
index 6e584d0b6626..b22238ab37fd 100644
--- a/usr.sbin/bhyve/pci_emul.c
+++ b/usr.sbin/bhyve/pci_emul.c
@@ -455,10 +455,13 @@ pci_emul_io_handler(struct vmctx *ctx, int vcpu, int in, 
int port, int bytes,
        uint64_t offset;
        int i;
 
+       assert(port >= 0);
+
        for (i = 0; i <= PCI_BARMAX; i++) {
                if (pdi->pi_bar[i].type == PCIBAR_IO &&
-                   port >= pdi->pi_bar[i].addr &&
-                   port + bytes <= pdi->pi_bar[i].addr + pdi->pi_bar[i].size) {
+                   (uint64_t)port >= pdi->pi_bar[i].addr &&
+                   (uint64_t)port + bytes <=
+                   pdi->pi_bar[i].addr + pdi->pi_bar[i].size) {
                        offset = port - pdi->pi_bar[i].addr;
                        if (in)
                                *eax = (*pe->pe_barread)(ctx, vcpu, pdi, i,
@@ -2298,7 +2301,7 @@ pci_snapshot_pci_dev(struct vm_snapshot_meta *meta)
        SNAPSHOT_BUF_OR_LEAVE(pi->pi_cfgdata, sizeof(pi->pi_cfgdata),
                              meta, ret, done);
 
-       for (i = 0; i < nitems(pi->pi_bar); i++) {
+       for (i = 0; i < (int)nitems(pi->pi_bar); i++) {
                SNAPSHOT_VAR_OR_LEAVE(pi->pi_bar[i].type, meta, ret, done);
                SNAPSHOT_VAR_OR_LEAVE(pi->pi_bar[i].size, meta, ret, done);
                SNAPSHOT_VAR_OR_LEAVE(pi->pi_bar[i].addr, meta, ret, done);
diff --git a/usr.sbin/bhyve/pci_hda.c b/usr.sbin/bhyve/pci_hda.c
index dc6493868093..e6e4ae4ca27d 100644
--- a/usr.sbin/bhyve/pci_hda.c
+++ b/usr.sbin/bhyve/pci_hda.c
@@ -615,7 +615,6 @@ hda_stream_start(struct hda_softc *sc, uint8_t stream_ind)
        uint32_t sdctl = 0;
        uint8_t strm = 0;
        uint8_t dir = 0;
-       int i;
 
        assert(!st->run);
 
@@ -640,7 +639,7 @@ hda_stream_start(struct hda_softc *sc, uint8_t stream_ind)
        st->bdl_cnt = bdl_cnt;
 
        bdle = (struct hda_bdle *)bdl_vaddr;
-       for (i = 0; i < bdl_cnt; i++, bdle++) {
+       for (size_t i = 0; i < bdl_cnt; i++, bdle++) {
                bdle_sz = bdle->len;
                assert(!(bdle_sz % HDA_DMA_ACCESS_LEN));
 
@@ -659,7 +658,7 @@ hda_stream_start(struct hda_softc *sc, uint8_t stream_ind)
                bdle_desc->len = bdle_sz;
                bdle_desc->ioc = bdle->ioc;
 
-               DPRINTF("bdle: 0x%x bdle_sz: 0x%x", i, bdle_sz);
+               DPRINTF("bdle: 0x%zx bdle_sz: 0x%x", i, bdle_sz);
        }
 
        sdctl = hda_get_reg_by_offset(sc, off + HDAC_SDCTL0);
diff --git a/usr.sbin/bhyve/pci_irq.c b/usr.sbin/bhyve/pci_irq.c
index ff41f6ec88dc..2ce962cdec44 100644
--- a/usr.sbin/bhyve/pci_irq.c
+++ b/usr.sbin/bhyve/pci_irq.c
@@ -63,14 +63,16 @@ __FBSDID("$FreeBSD$");
 /* IRQ count to disable an IRQ. */
 #define        IRQ_DISABLED    0xff
 
+#define        NPIRQS          8
 static struct pirq {
        uint8_t reg;
        int     use_count;
        int     active_count;
        pthread_mutex_t lock;
-} pirqs[8];
+} pirqs[NPIRQS];
 
-static u_char irq_counts[16];
+#define        NIRQ_COUNTS     16
+static u_char irq_counts[NIRQ_COUNTS];
 static int pirq_cold = 1;
 
 /*
@@ -91,7 +93,7 @@ uint8_t
 pirq_read(int pin)
 {
 
-       assert(pin > 0 && pin <= nitems(pirqs));
+       assert(pin > 0 && pin <= NPIRQS);
        return (pirqs[pin - 1].reg);
 }
 
@@ -100,7 +102,7 @@ pirq_write(struct vmctx *ctx, int pin, uint8_t val)
 {
        struct pirq *pirq;
 
-       assert(pin > 0 && pin <= nitems(pirqs));
+       assert(pin > 0 && pin <= NPIRQS);
        pirq = &pirqs[pin - 1];
        pthread_mutex_lock(&pirq->lock);
        if (pirq->reg != (val & (PIRQ_DIS | PIRQ_IRQ))) {
@@ -117,7 +119,7 @@ void
 pci_irq_reserve(int irq)
 {
 
-       assert(irq >= 0 && irq < nitems(irq_counts));
+       assert(irq >= 0 && irq < NIRQ_COUNTS);
        assert(pirq_cold);
        assert(irq_counts[irq] == 0 || irq_counts[irq] == IRQ_DISABLED);
        irq_counts[irq] = IRQ_DISABLED;
@@ -127,7 +129,7 @@ void
 pci_irq_use(int irq)
 {
 
-       assert(irq >= 0 && irq < nitems(irq_counts));
+       assert(irq >= 0 && irq < NIRQ_COUNTS);
        assert(pirq_cold);
        assert(irq_counts[irq] != IRQ_DISABLED);
        irq_counts[irq]++;
@@ -138,13 +140,13 @@ pci_irq_init(struct vmctx *ctx __unused)
 {
        int i;
 
-       for (i = 0; i < nitems(pirqs); i++) {
+       for (i = 0; i < NPIRQS; i++) {
                pirqs[i].reg = PIRQ_DIS;
                pirqs[i].use_count = 0;
                pirqs[i].active_count = 0;
                pthread_mutex_init(&pirqs[i].lock, NULL);
        }
-       for (i = 0; i < nitems(irq_counts); i++) {
+       for (i = 0; i < NIRQ_COUNTS; i++) {
                if (IRQ_PERMITTED(i))
                        irq_counts[i] = 0;
                else
@@ -156,10 +158,12 @@ void
 pci_irq_assert(struct pci_devinst *pi)
 {
        struct pirq *pirq;
+       int pin;
 
-       if (pi->pi_lintr.pirq_pin > 0) {
-               assert(pi->pi_lintr.pirq_pin <= nitems(pirqs));
-               pirq = &pirqs[pi->pi_lintr.pirq_pin - 1];
+       pin = pi->pi_lintr.pirq_pin;
+       if (pin > 0) {
+               assert(pin <= NPIRQS);
+               pirq = &pirqs[pin - 1];
                pthread_mutex_lock(&pirq->lock);
                pirq->active_count++;
                if (pirq->active_count == 1 && pirq_valid_irq(pirq->reg)) {
@@ -177,10 +181,12 @@ void
 pci_irq_deassert(struct pci_devinst *pi)
 {
        struct pirq *pirq;
+       int pin;
 
-       if (pi->pi_lintr.pirq_pin > 0) {
-               assert(pi->pi_lintr.pirq_pin <= nitems(pirqs));
-               pirq = &pirqs[pi->pi_lintr.pirq_pin - 1];
+       pin = pi->pi_lintr.pirq_pin;
+       if (pin > 0) {
+               assert(pin <= NPIRQS);
+               pirq = &pirqs[pin - 1];
                pthread_mutex_lock(&pirq->lock);
                pirq->active_count--;
                if (pirq->active_count == 0 && pirq_valid_irq(pirq->reg)) {
@@ -209,7 +215,7 @@ pirq_alloc_pin(struct pci_devinst *pi)
                /* Find the least-used PIRQ pin. */
                best_pin = 0;
                best_count = pirqs[0].use_count;
-               for (pin = 1; pin < nitems(pirqs); pin++) {
+               for (pin = 1; pin < NPIRQS; pin++) {
                        if (pirqs[pin].use_count < best_count) {
                                best_pin = pin;
                                best_count = pirqs[pin].use_count;
@@ -222,7 +228,7 @@ pirq_alloc_pin(struct pci_devinst *pi)
        if (pirqs[best_pin].reg == PIRQ_DIS) {
                best_irq = -1;
                best_count = 0;
-               for (irq = 0; irq < nitems(irq_counts); irq++) {
+               for (irq = 0; irq < NIRQ_COUNTS; irq++) {
                        if (irq_counts[irq] == IRQ_DISABLED)
                                continue;
                        if (best_irq == -1 || irq_counts[irq] < best_count) {
@@ -242,7 +248,7 @@ pirq_alloc_pin(struct pci_devinst *pi)
 int
 pirq_irq(int pin)
 {
-       assert(pin > 0 && pin <= nitems(pirqs));
+       assert(pin > 0 && pin <= NPIRQS);
        return (pirqs[pin - 1].reg & PIRQ_IRQ);
 }
 
@@ -255,7 +261,7 @@ pirq_dsdt(void)
        int irq, pin;
 
        irq_prs = NULL;
-       for (irq = 0; irq < nitems(irq_counts); irq++) {
+       for (irq = 0; irq < NIRQ_COUNTS; irq++) {
                if (!IRQ_PERMITTED(irq))
                        continue;
                if (irq_prs == NULL)
@@ -294,7 +300,7 @@ pirq_dsdt(void)
        dsdt_line("  Return (0x01)");
        dsdt_line("}");
 
-       for (pin = 0; pin < nitems(pirqs); pin++) {
+       for (pin = 0; pin < NPIRQS; pin++) {
                dsdt_line("");
                dsdt_line("Device (LNK%c)", 'A' + pin);
                dsdt_line("{");
diff --git a/usr.sbin/bhyve/pci_nvme.c b/usr.sbin/bhyve/pci_nvme.c
index e180ce0de7ca..321c29e565e5 100644
--- a/usr.sbin/bhyve/pci_nvme.c
+++ b/usr.sbin/bhyve/pci_nvme.c
@@ -3272,7 +3272,7 @@ pci_nvme_init(struct vmctx *ctx __unused, struct 
pci_devinst *pi, nvlist_t *nvl)
 
        STAILQ_INIT(&sc->ioreqs_free);
        sc->ioreqs = calloc(sc->ioslots, sizeof(struct pci_nvme_ioreq));
-       for (int i = 0; i < sc->ioslots; i++) {
+       for (uint32_t i = 0; i < sc->ioslots; i++) {
                STAILQ_INSERT_TAIL(&sc->ioreqs_free, &sc->ioreqs[i], link);
        }
 
diff --git a/usr.sbin/bhyve/pci_passthru.c b/usr.sbin/bhyve/pci_passthru.c
index b28277f7975e..3f5cbe221bd6 100644
--- a/usr.sbin/bhyve/pci_passthru.c
+++ b/usr.sbin/bhyve/pci_passthru.c
@@ -183,7 +183,7 @@ write_config(const struct pcisel *sel, long reg, int width, 
uint32_t data)
 static int
 passthru_add_msicap(struct pci_devinst *pi, int msgnum, int nextptr)
 {
-       int capoff, i;
+       int capoff;
        struct msicap msicap;
        u_char *capdata;
 
@@ -197,7 +197,7 @@ passthru_add_msicap(struct pci_devinst *pi, int msgnum, int 
nextptr)
         */
        capoff = 256 - roundup(sizeof(msicap), 4);
        capdata = (u_char *)&msicap;
-       for (i = 0; i < sizeof(msicap); i++)
+       for (size_t i = 0; i < sizeof(msicap); i++)
                pci_set_cfgdata8(pi, capoff + i, capdata[i]);
 
        return (capoff);
diff --git a/usr.sbin/bhyve/pci_virtio_input.c 
b/usr.sbin/bhyve/pci_virtio_input.c
index ba5c024e30bf..13e193f8d92f 100644
--- a/usr.sbin/bhyve/pci_virtio_input.c
+++ b/usr.sbin/bhyve/pci_virtio_input.c
@@ -421,7 +421,7 @@ pci_vtinput_cfgread(void *vsc, int offset, int size, 
uint32_t *retval)
        struct pci_vtinput_softc *sc = vsc;
 
        /* check for valid offset and size */
-       if (offset + size > sizeof(struct vtinput_config)) {
+       if (offset + size > (int)sizeof(struct vtinput_config)) {
                WPRINTF(("%s: read to invalid offset/size %d/%d", __func__,
                    offset, size));
                memset(retval, 0, size);
diff --git a/usr.sbin/bhyve/pci_xhci.c b/usr.sbin/bhyve/pci_xhci.c
index d0e4b0118602..5f12762dfeb1 100644
--- a/usr.sbin/bhyve/pci_xhci.c
+++ b/usr.sbin/bhyve/pci_xhci.c
@@ -650,8 +650,7 @@ pci_xhci_init_ep(struct pci_xhci_dev_emu *dev, int epid)
        struct xhci_dev_ctx    *dev_ctx;
        struct pci_xhci_dev_ep *devep;
        struct xhci_endp_ctx   *ep_ctx;
-       uint32_t        pstreams;
-       int             i;
+       uint32_t        i, pstreams;
 
        dev_ctx = dev->dev_ctx;
        ep_ctx = &dev_ctx->ctx_ep[epid];
@@ -2107,7 +2106,7 @@ pci_xhci_rtsregs_write(struct pci_xhci_softc *sc, 
uint64_t offset,
 
                if (rts->er_events_cnt > 0) {
                        uint64_t erdp;
-                       uint32_t erdp_i;
+                       int erdp_i;
 
                        erdp = rts->intrreg.erdp & ~0xF;
                        erdp_i = (erdp - rts->erstba_p->qwEvrsTablePtr) /
diff --git a/usr.sbin/bhyve/snapshot.c b/usr.sbin/bhyve/snapshot.c
index 7ec923d6faec..0c7267316a17 100644
--- a/usr.sbin/bhyve/snapshot.c
+++ b/usr.sbin/bhyve/snapshot.c
@@ -450,7 +450,8 @@ lookup_struct(enum snapshot_req struct_id, struct 
restore_state *rstate,
                        JSON_GET_INT_OR_RETURN(JSON_FILE_OFFSET_KEY, obj,
                                               &file_offset, NULL);
                        assert(file_offset >= 0);
-                       assert(file_offset + size <= rstate->kdata_len);
+                       assert((uint64_t)file_offset + size <=
+                           rstate->kdata_len);
 
                        *struct_size = (size_t)size;
                        return ((uint8_t *)rstate->kdata_map + file_offset);
@@ -479,7 +480,7 @@ lookup_check_dev(const char *dev_name, struct restore_state 
*rstate,
                JSON_GET_INT_OR_RETURN(JSON_FILE_OFFSET_KEY, obj,
                                       &file_offset, NULL);
                assert(file_offset >= 0);
-               assert(file_offset + size <= rstate->kdata_len);
+               assert((uint64_t)file_offset + size <= rstate->kdata_len);
 
                *data_size = (size_t)size;
                return ((uint8_t *)rstate->kdata_map + file_offset);
@@ -1046,8 +1047,9 @@ vm_snapshot_kern_struct(int data_fd, xo_handle_t *xop, 
const char *array_key,
 
        data_size = vm_get_snapshot_size(meta);
 
+       /* XXX-MJ no handling for short writes. */
        write_cnt = write(data_fd, meta->buffer.buf_start, data_size);
-       if (write_cnt != data_size) {
+       if (write_cnt < 0 || (size_t)write_cnt != data_size) {
                perror("Failed to write all snapshotted data.");
                ret = -1;
                goto done;
@@ -1138,13 +1140,14 @@ static int
 vm_snapshot_dev_write_data(int data_fd, xo_handle_t *xop, const char 
*array_key,
                           struct vm_snapshot_meta *meta, off_t *offset)
 {
-       int ret;
+       ssize_t ret;
        size_t data_size;
 
        data_size = vm_get_snapshot_size(meta);
 
+       /* XXX-MJ no handling for short writes. */
        ret = write(data_fd, meta->buffer.buf_start, data_size);
-       if (ret != data_size) {
+       if (ret < 0 || (size_t)ret != data_size) {
                perror("Failed to write all snapshotted data.");
                return (-1);
        }
diff --git a/usr.sbin/bhyve/task_switch.c b/usr.sbin/bhyve/task_switch.c
index f1b564d560c5..78dfb8190e48 100644
--- a/usr.sbin/bhyve/task_switch.c
+++ b/usr.sbin/bhyve/task_switch.c
@@ -774,7 +774,7 @@ vmexit_task_switch(struct vmctx *ctx, struct vm_exit 
*vmexit, int *pvcpu)
                minlimit = 0;
 
        assert(minlimit > 0);
-       if (nt.limit < minlimit) {
+       if (nt.limit < (unsigned int)minlimit) {
                sel_exception(ctx, vcpu, IDT_TS, nt_sel, ext);
                goto done;
        }
diff --git a/usr.sbin/bhyve/uart_emul.c b/usr.sbin/bhyve/uart_emul.c
index 725a789a5898..1539c7ffa135 100644
--- a/usr.sbin/bhyve/uart_emul.c
+++ b/usr.sbin/bhyve/uart_emul.c
@@ -616,7 +616,7 @@ int
 uart_legacy_alloc(int which, int *baseaddr, int *irq)
 {
 
-       if (which < 0 || which >= UART_NLDEVS || uart_lres[which].inuse)
+       if (which < 0 || which >= (int)UART_NLDEVS || uart_lres[which].inuse)
                return (-1);
 
        uart_lres[which].inuse = true;
diff --git a/usr.sbin/bhyve/virtio.c b/usr.sbin/bhyve/virtio.c
index d16371deb40d..32dd9336c5df 100644
--- a/usr.sbin/bhyve/virtio.c
+++ b/usr.sbin/bhyve/virtio.c
@@ -773,7 +773,7 @@ bad:
                vs->vs_curq = value;
                break;
        case VIRTIO_PCI_QUEUE_NOTIFY:
-               if (value >= vc->vc_nvq) {
+               if (value >= (unsigned int)vc->vc_nvq) {
                        EPRINTLN("%s: queue %d notify out of range",
                                name, (int)value);
                        goto done;

Reply via email to