From: Marc-AndrĂ© Lureau <[email protected]>

CQGAVssProvider implements three COM interfaces, each with its own
IUnknown base subobject. Returning the complete object address for
IID_IUnknown relies on IVssSoftwareSnapshotProvider remaining the first
base class.

Return the IVssSoftwareSnapshotProvider subobject instead. This selects
the canonical IUnknown identity without relying on the complete-object
layout.

Signed-off-by: Marc-AndrĂ© Lureau <[email protected]>
Reviewed-by: Kostiantyn Kostiuk <[email protected]>
Link: 
https://lore.kernel.org/qemu-devel/[email protected]
Signed-off-by: Kostiantyn Kostiuk <[email protected]>
---
 qga/vss-win32/provider.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/qga/vss-win32/provider.cpp b/qga/vss-win32/provider.cpp
index 377571b948..44c3c74bd2 100644
--- a/qga/vss-win32/provider.cpp
+++ b/qga/vss-win32/provider.cpp
@@ -212,7 +212,8 @@ CQGAVssProvider::~CQGAVssProvider()
 STDMETHODIMP CQGAVssProvider::QueryInterface(REFIID riid, void **ppObj)
 {
     if (riid == IID_IUnknown) {
-        *ppObj = static_cast<void*>(this);
+        *ppObj = static_cast<void*>(
+            static_cast<IVssSoftwareSnapshotProvider*>(this));
         AddRef();
         return S_OK;
     }
-- 
2.55.0


Reply via email to