diff --git a/devicemodel/core/mem.c b/devicemodel/core/mem.c index 59242b200..9d2f4235c 100644 --- a/devicemodel/core/mem.c +++ b/devicemodel/core/mem.c @@ -196,7 +196,7 @@ register_mem_int(struct mmio_rb_tree *rbt, struct mem_range *memp) struct mmio_rb_range *entry, *mrp; int err; - err = 0; + err = -1; mrp = malloc(sizeof(struct mmio_rb_range)); @@ -210,8 +210,7 @@ register_mem_int(struct mmio_rb_tree *rbt, struct mem_range *memp) pthread_rwlock_unlock(&mmio_rwlock); if (err) free(mrp); - } else - err = -1; + } return err; } diff --git a/devicemodel/hw/pci/xhci.c b/devicemodel/hw/pci/xhci.c index 582fe0b4e..3090fd92c 100644 --- a/devicemodel/hw/pci/xhci.c +++ b/devicemodel/hw/pci/xhci.c @@ -4126,6 +4126,8 @@ errout: free(xdev->portregs); xdev->portregs = NULL; } + if (rc < -2 && s) + free(s); UPRINTF(LFTL, "fail to parse xHCI options, rc=%d\r\n", rc); if (opts)