From 7bbb8706eecf72abbc6dd6a53718611e3fe2c41e Mon Sep 17 00:00:00 2001 From: "Richard E. Silverman" Date: Wed, 16 Nov 2022 01:29:28 -0500 Subject: [PATCH] fix segfault on missing CSP These routines: NCryptOpenStorageProvider() winpr_NCryptOpenStorageProviderEx would segfault with PKCS11 support enabled, if the user did not supply a service provider name ("CSP"); they assumed the parameter pszProviderName would always be non-NULL, but it's NULL in that case. --- winpr/libwinpr/ncrypt/ncrypt.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winpr/libwinpr/ncrypt/ncrypt.c b/winpr/libwinpr/ncrypt/ncrypt.c index aab601763..cbd953af3 100644 --- a/winpr/libwinpr/ncrypt/ncrypt.c +++ b/winpr/libwinpr/ncrypt/ncrypt.c @@ -131,8 +131,8 @@ SECURITY_STATUS NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE* phProvider, LPCWST { #ifdef WITH_PKCS11 - if (_wcscmp(pszProviderName, MS_SMART_CARD_KEY_STORAGE_PROVIDER) == 0 || - _wcscmp(pszProviderName, MS_SCARD_PROV) == 0) + if (pszProviderName && (_wcscmp(pszProviderName, MS_SMART_CARD_KEY_STORAGE_PROVIDER) == 0 || + _wcscmp(pszProviderName, MS_SCARD_PROV) == 0)) { return winpr_NCryptOpenStorageProviderEx(phProvider, pszProviderName, dwFlags, NULL); } @@ -146,8 +146,8 @@ SECURITY_STATUS winpr_NCryptOpenStorageProviderEx(NCRYPT_PROV_HANDLE* phProvider LPCSTR* modulePaths) { #ifdef WITH_PKCS11 - if (_wcscmp(pszProviderName, MS_SMART_CARD_KEY_STORAGE_PROVIDER) == 0 || - _wcscmp(pszProviderName, MS_SCARD_PROV) == 0) + if (pszProviderName && (_wcscmp(pszProviderName, MS_SMART_CARD_KEY_STORAGE_PROVIDER) == 0 || + _wcscmp(pszProviderName, MS_SCARD_PROV) == 0)) { return NCryptOpenP11StorageProviderEx(phProvider, pszProviderName, dwFlags, modulePaths); }