Message ID | 20211213111554.62394-4-konstantin@daynix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | gqa-win: get_pci_info: Fix memory leak | expand |
On Mon, Dec 13, 2021 at 3:16 PM Kostiantyn Kostiuk <konstantin@daynix.com> wrote: > > In case when the function fails to get parent device data, > the parent_dev_info variable will be initialized, but not freed. > > Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com> > Signed-off-by: Kostiantyn Kostiuk <konstantin@daynix.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > qga/commands-win32.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/qga/commands-win32.c b/qga/commands-win32.c > index 12f7a88078..cef14a8762 100644 > --- a/qga/commands-win32.c > +++ b/qga/commands-win32.c > @@ -515,6 +515,8 @@ DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT, > static GuestPCIAddress *get_pci_info(int number, Error **errp) > { > HDEVINFO dev_info = INVALID_HANDLE_VALUE; > + HDEVINFO parent_dev_info = INVALID_HANDLE_VALUE; > + > SP_DEVINFO_DATA dev_info_data; > SP_DEVICE_INTERFACE_DATA dev_iface_data; > HANDLE dev_file; > @@ -542,7 +544,6 @@ static GuestPCIAddress *get_pci_info(int number, Error **errp) > PSP_DEVICE_INTERFACE_DETAIL_DATA pdev_iface_detail_data = NULL; > STORAGE_DEVICE_NUMBER sdn; > char *parent_dev_id = NULL; > - HDEVINFO parent_dev_info; > SP_DEVINFO_DATA parent_dev_info_data; > DWORD j; > DWORD size = 0; > @@ -744,11 +745,13 @@ static GuestPCIAddress *get_pci_info(int number, Error **errp) > break; > } > } > - SetupDiDestroyDeviceInfoList(parent_dev_info); > break; > } > > cleanup: > + if (parent_dev_info != INVALID_HANDLE_VALUE) { > + SetupDiDestroyDeviceInfoList(parent_dev_info); > + } > if (dev_info != INVALID_HANDLE_VALUE) { > SetupDiDestroyDeviceInfoList(dev_info); > } > -- > 2.25.1 >
diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 12f7a88078..cef14a8762 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -515,6 +515,8 @@ DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT, static GuestPCIAddress *get_pci_info(int number, Error **errp) { HDEVINFO dev_info = INVALID_HANDLE_VALUE; + HDEVINFO parent_dev_info = INVALID_HANDLE_VALUE; + SP_DEVINFO_DATA dev_info_data; SP_DEVICE_INTERFACE_DATA dev_iface_data; HANDLE dev_file; @@ -542,7 +544,6 @@ static GuestPCIAddress *get_pci_info(int number, Error **errp) PSP_DEVICE_INTERFACE_DETAIL_DATA pdev_iface_detail_data = NULL; STORAGE_DEVICE_NUMBER sdn; char *parent_dev_id = NULL; - HDEVINFO parent_dev_info; SP_DEVINFO_DATA parent_dev_info_data; DWORD j; DWORD size = 0; @@ -744,11 +745,13 @@ static GuestPCIAddress *get_pci_info(int number, Error **errp) break; } } - SetupDiDestroyDeviceInfoList(parent_dev_info); break; } cleanup: + if (parent_dev_info != INVALID_HANDLE_VALUE) { + SetupDiDestroyDeviceInfoList(parent_dev_info); + } if (dev_info != INVALID_HANDLE_VALUE) { SetupDiDestroyDeviceInfoList(dev_info); }