From 49d7c9e83e929e925e3c7701d61dffcdb4382f91 Mon Sep 17 00:00:00 2001 From: Nikhil Joshi Date: Wed, 18 Sep 2019 09:02:20 +0530 Subject: [PATCH] Minor fixes to cleanup Windows para-virtualization changes Fix indentation and variable name casing. Fix adapterFree to remove null-pointer check and set it to null after free. Add missing header required for adapterAdd. Add checks for malloced pointers. --- loader/windows/icd_windows.c | 25 ++++++++++++++----------- loader/windows/icd_windows_dxgk.c | 23 +++++++++++++---------- loader/windows/icd_windows_hkr.c | 6 +++--- loader/windows/icd_windows_hkr.h | 2 +- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/loader/windows/icd_windows.c b/loader/windows/icd_windows.c index 8d51242..f1609e8 100644 --- a/loader/windows/icd_windows.c +++ b/loader/windows/icd_windows.c @@ -52,8 +52,10 @@ BOOL adapterAdd(const char* szName, LUID luid) { newCapacity = 1; } - else + else if(newCapacity < UINT_MAX/2) + { newCapacity *= 2; + } WinAdapter* pNewBegin = malloc(newCapacity * sizeof(*pWinAdapterBegin)); if (!pNewBegin) @@ -88,8 +90,8 @@ BOOL adapterAdd(const char* szName, LUID luid) void adapterFree(WinAdapter *pWinAdapter) { - if(pWinAdapter->szName) - free(pWinAdapter->szName); + free(pWinAdapter->szName); + pWinAdapter->szName = NULL; } /* @@ -192,16 +194,17 @@ BOOL CALLBACK khrIcdOsVendorsEnumerate(PINIT_ONCE InitOnce, PVOID Parameter, PVO while (SUCCEEDED(pFactory->lpVtbl->EnumAdapters(pFactory, i++, &pAdapter))) { DXGI_ADAPTER_DESC AdapterDesc; - pAdapter->lpVtbl->GetDesc(pAdapter, &AdapterDesc); - - for (WinAdapter* iterAdapter = pWinAdapterBegin; iterAdapter != pWinAdapterEnd; ++iterAdapter) + if (SUCCEEDED(pAdapter->lpVtbl->GetDesc(pAdapter, &AdapterDesc))) { - if (iterAdapter->luid.LowPart == AdapterDesc.AdapterLuid.LowPart - && iterAdapter->luid.HighPart == AdapterDesc.AdapterLuid.HighPart) + for (WinAdapter* iterAdapter = pWinAdapterBegin; iterAdapter != pWinAdapterEnd; ++iterAdapter) { - khrIcdVendorAdd(iterAdapter->szName); - break; - } + if (iterAdapter->luid.LowPart == AdapterDesc.AdapterLuid.LowPart + && iterAdapter->luid.HighPart == AdapterDesc.AdapterLuid.HighPart) + { + khrIcdVendorAdd(iterAdapter->szName); + break; + } + } } pAdapter->lpVtbl->Release(pAdapter); diff --git a/loader/windows/icd_windows_dxgk.c b/loader/windows/icd_windows_dxgk.c index cf59f68..c55cbf7 100644 --- a/loader/windows/icd_windows_dxgk.c +++ b/loader/windows/icd_windows_dxgk.c @@ -88,7 +88,7 @@ bool khrIcdOsVendorsEnumerateDXGK(void) KHR_ICD_TRACE("D3DKMT_ENUMADAPTERS2 status != SUCCESS\n"); goto out; } - const char* cszOpenCLRegKeyName = GetOpenCLRegKeyName(); + const char* cszOpenCLRegKeyName = getOpenCLRegKeyName(); const int szOpenCLRegKeyName = (int)(strlen(cszOpenCLRegKeyName) + 1)*sizeof(cszOpenCLRegKeyName[0]); for (UINT AdapterIndex = 0; AdapterIndex < EnumAdapters.NumAdapters; AdapterIndex++) { @@ -98,15 +98,16 @@ bool khrIcdOsVendorsEnumerateDXGK(void) queryArgs.QueryType = D3DDDI_QUERYREGISTRY_ADAPTERKEY; queryArgs.QueryFlags.TranslatePath = TRUE; queryArgs.ValueType = REG_SZ; - result = MultiByteToWideChar( - CP_ACP, - 0, - cszOpenCLRegKeyName, - szOpenCLRegKeyName, - queryArgs.ValueName, - ARRAYSIZE(queryArgs.ValueName)); - if (!result) { - KHR_ICD_TRACE("MultiByteToWideChar status != SUCCESS\n"); + result = MultiByteToWideChar( + CP_ACP, + 0, + cszOpenCLRegKeyName, + szOpenCLRegKeyName, + queryArgs.ValueName, + ARRAYSIZE(queryArgs.ValueName)); + if (!result) + { + KHR_ICD_TRACE("MultiByteToWideChar status != SUCCESS\n"); continue; } D3DKMT_QUERYADAPTERINFO queryAdapterInfo = {0}; @@ -125,6 +126,8 @@ bool khrIcdOsVendorsEnumerateDXGK(void) { ULONG queryBufferSize = sizeof(D3DDDI_QUERYREGISTRY_INFO) + queryArgs.OutputValueSize; pQueryBuffer = (D3DDDI_QUERYREGISTRY_INFO*)malloc(queryBufferSize); + if (pQueryBuffer == NULL) + continue; memcpy(pQueryBuffer, &queryArgs, sizeof(D3DDDI_QUERYREGISTRY_INFO)); queryAdapterInfo.pPrivateDriverData = pQueryBuffer; queryAdapterInfo.PrivateDriverDataSize = queryBufferSize; diff --git a/loader/windows/icd_windows_hkr.c b/loader/windows/icd_windows_hkr.c index 060ce5b..a323312 100644 --- a/loader/windows/icd_windows_hkr.c +++ b/loader/windows/icd_windows_hkr.c @@ -52,7 +52,7 @@ static const char OPENCL_REG_SUB_KEY_WOW[] = "OpenCLDriverNameWow"; #endif // Do not free the memory returned by this function. -const char* GetOpenCLRegKeyName(void) +const char* getOpenCLRegKeyName(void) { #ifdef _WIN64 return OPENCL_REG_SUB_KEY; @@ -97,7 +97,7 @@ static bool ReadOpenCLKey(DEVINST dnDevNode) { result = RegQueryValueExA( hkey, - GetOpenCLRegKeyName(), + getOpenCLRegKeyName(), NULL, &dwLibraryNameType, NULL, @@ -118,7 +118,7 @@ static bool ReadOpenCLKey(DEVINST dnDevNode) result = RegQueryValueExA( hkey, - GetOpenCLRegKeyName(), + getOpenCLRegKeyName(), NULL, &dwLibraryNameType, (LPBYTE)cszOclPath, diff --git a/loader/windows/icd_windows_hkr.h b/loader/windows/icd_windows_hkr.h index 8aef473..039da05 100644 --- a/loader/windows/icd_windows_hkr.h +++ b/loader/windows/icd_windows_hkr.h @@ -26,4 +26,4 @@ extern const LUID ZeroLuid; BOOL adapterAdd(const char* szName, LUID luid); // Do not free the memory returned by this function. -const char* GetOpenCLRegKeyName(void); +const char* getOpenCLRegKeyName(void); -- 2.7.4