dm: usb: fix possible memory leak

fix possible memory leak for usb.

Tracked-On: #2705
Signed-off-by: Conghui Chen <conghui.chen@intel.com>
Reviewed-by: Yuan Liu <yuan1.liu@intel.com>
Reviewed-by: Yonghua Huang <yonghua.huang@intel.com>
This commit is contained in:
Conghui Chen 2019-03-12 07:17:32 +08:00 committed by wenlingz
parent d585389554
commit 2171b6d2b9
2 changed files with 22 additions and 2 deletions

View File

@ -4142,8 +4142,8 @@ errout:
for (i = 1; i <= XHCI_MAX_DEVS && xdev->devices[i]; i++)
free(xdev->devices[i]);
xdev->ndevices = 0;
xdev->devices = NULL;
free(xdev->devices);
xdev->devices = NULL;
}
if (xdev->slots) {
free(xdev->slots);
@ -4301,7 +4301,21 @@ pci_xhci_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
done:
if (error) {
UPRINTF(LFTL, "%s fail, error=%d\n", __func__, error);
free(xdev);
if (xdev) {
if (xdev->devices) {
free(xdev->devices);
xdev->devices = NULL;
}
if (xdev->slots) {
free(xdev->slots);
xdev->slots = NULL;
}
if (xdev->portregs) {
free(xdev->portregs);
xdev->portregs = NULL;
}
free(xdev);
}
}
return error;

View File

@ -868,6 +868,12 @@ usb_dev_data(void *pdata, struct usb_data_xfer *xfer, int dir, int epctx)
} else {
UPRINTF(LFTL, "%s: wrong endpoint type %d\r\n", __func__, type);
if (req->buffer)
free(req->buffer);
if (req->libusb_xfer)
libusb_free_transfer(req->libusb_xfer);
free(req);
xfer->status = USB_ERR_INVAL;
}