[core,nla] initialize stack variables

This commit is contained in:
akallabeth 2023-01-26 12:56:42 +01:00 committed by Martin Fleisz
parent f5d759c979
commit 22f3bf6f78

View File

@ -156,8 +156,11 @@ static BOOL nla_Digest_Update_From_SecBuffer(WINPR_DIGEST_CTX* ctx, const SecBuf
static BOOL nla_sec_buffer_alloc(SecBuffer* buffer, size_t size)
{
WINPR_ASSERT(buffer);
sspi_SecBufferFree(buffer);
if (!sspi_SecBufferAlloc(buffer, size))
if (size > ULONG_MAX)
return FALSE;
if (!sspi_SecBufferAlloc(buffer, (ULONG)size))
return FALSE;
WINPR_ASSERT(buffer);
@ -168,12 +171,11 @@ static BOOL nla_sec_buffer_alloc(SecBuffer* buffer, size_t size)
static BOOL nla_sec_buffer_alloc_from_data(SecBuffer* buffer, const BYTE* data, size_t offset,
size_t size)
{
BYTE* pb;
if (!nla_sec_buffer_alloc(buffer, offset + size))
return FALSE;
WINPR_ASSERT(buffer);
pb = buffer->pvBuffer;
BYTE* pb = buffer->pvBuffer;
memcpy(&pb[offset], data, size);
return TRUE;
}
@ -196,13 +198,12 @@ static const UINT32 NonceLength = 32;
static BOOL nla_adjust_settings_from_smartcard(rdpNla* nla)
{
rdpSettings* settings;
BOOL ret = FALSE;
WINPR_ASSERT(nla);
WINPR_ASSERT(nla->rdpcontext);
settings = nla->rdpcontext->settings;
rdpSettings* settings = nla->rdpcontext->settings;
WINPR_ASSERT(settings);
if (!settings->SmartcardLogon)
@ -270,19 +271,15 @@ out:
static BOOL nla_client_setup_identity(rdpNla* nla)
{
WINPR_SAM* sam;
WINPR_SAM_ENTRY* entry;
BOOL PromptPassword = FALSE;
rdpSettings* settings;
freerdp* instance;
WINPR_ASSERT(nla);
WINPR_ASSERT(nla->rdpcontext);
settings = nla->rdpcontext->settings;
rdpSettings* settings = nla->rdpcontext->settings;
WINPR_ASSERT(settings);
instance = nla->rdpcontext->instance;
freerdp* instance = nla->rdpcontext->instance;
WINPR_ASSERT(instance);
/* */
@ -295,10 +292,12 @@ static BOOL nla_client_setup_identity(rdpNla* nla)
if (PromptPassword && !utils_str_is_empty(settings->Username))
{
sam = SamOpen(NULL, TRUE);
WINPR_SAM* sam = SamOpen(NULL, TRUE);
if (sam)
{
entry = SamLookupUserA(sam, settings->Username, strlen(settings->Username), NULL, 0);
const size_t userLength = strlen(settings->Username);
WINPR_SAM_ENTRY* entry = SamLookupUserA(
sam, settings->Username, userLength + 1 /* ensure '\0' is checked too */, NULL, 0);
if (entry)
{
/**
@ -380,7 +379,7 @@ static BOOL nla_client_setup_identity(rdpNla* nla)
{
if (sspi_SetAuthIdentityWithUnicodePassword(
nla->identity, settings->Username, settings->Domain,
(UINT16*)settings->RedirectionPassword,
(const UINT16*)settings->RedirectionPassword,
settings->RedirectionPasswordLength / sizeof(WCHAR) - 1) < 0)
return FALSE;
}
@ -416,13 +415,10 @@ static BOOL nla_client_setup_identity(rdpNla* nla)
static int nla_client_init(rdpNla* nla)
{
rdpTls* tls = NULL;
rdpSettings* settings;
WINPR_ASSERT(nla);
WINPR_ASSERT(nla->rdpcontext);
settings = nla->rdpcontext->settings;
rdpSettings* settings = nla->rdpcontext->settings;
WINPR_ASSERT(settings);
nla_set_state(nla, NLA_STATE_INITIAL);
@ -441,7 +437,7 @@ static int nla_client_init(rdpNla* nla)
if (!credssp_auth_setup_client(nla->auth, "TERMSRV", hostname, nla->identity, nla->pkinitArgs))
return -1;
tls = transport_get_tls(nla->transport);
rdpTls* tls = transport_get_tls(nla->transport);
if (!tls)
{
@ -460,8 +456,6 @@ static int nla_client_init(rdpNla* nla)
int nla_client_begin(rdpNla* nla)
{
int rc;
WINPR_ASSERT(nla);
if (nla_client_init(nla) < 1)
@ -479,7 +473,7 @@ int nla_client_begin(rdpNla* nla)
*/
credssp_auth_set_flags(nla->auth, ISC_REQ_MUTUAL_AUTH | ISC_REQ_CONFIDENTIALITY);
rc = credssp_auth_authenticate(nla->auth);
const int rc = credssp_auth_authenticate(nla->auth);
switch (rc)
{
@ -505,10 +499,8 @@ int nla_client_begin(rdpNla* nla)
static int nla_client_recv_nego_token(rdpNla* nla)
{
int rc;
credssp_auth_take_input_buffer(nla->auth, &nla->negoToken);
rc = credssp_auth_authenticate(nla->auth);
const int rc = credssp_auth_authenticate(nla->auth);
switch (rc)
{
@ -517,19 +509,22 @@ static int nla_client_recv_nego_token(rdpNla* nla)
return -1;
break;
case 1: /* completed */
{
int res = -1;
if (nla->peerVersion < 5)
rc = nla_encrypt_public_key_echo(nla);
res = nla_encrypt_public_key_echo(nla);
else
rc = nla_encrypt_public_key_hash(nla);
res = nla_encrypt_public_key_hash(nla);
if (!rc)
if (!res)
return -1;
if (!nla_send(nla))
return -1;
nla_set_state(nla, NLA_STATE_PUB_KEY_AUTH);
break;
}
break;
default:
return -1;
@ -540,7 +535,7 @@ static int nla_client_recv_nego_token(rdpNla* nla)
static int nla_client_recv_pub_key_auth(rdpNla* nla)
{
BOOL rc;
BOOL rc = FALSE;
WINPR_ASSERT(nla);
@ -590,12 +585,10 @@ static int nla_client_recv(rdpNla* nla)
static int nla_client_authenticate(rdpNla* nla)
{
int rc = -1;
wStream* s;
int status;
WINPR_ASSERT(nla);
s = Stream_New(NULL, 4096);
wStream* s = Stream_New(NULL, 4096);
if (!s)
{
@ -609,7 +602,7 @@ static int nla_client_authenticate(rdpNla* nla)
while (nla_get_state(nla) < NLA_STATE_AUTH_INFO)
{
Stream_SetPosition(s, 0);
status = transport_read_pdu(nla->transport, s);
const int status = transport_read_pdu(nla->transport, s);
if (status < 0)
{
@ -617,9 +610,9 @@ static int nla_client_authenticate(rdpNla* nla)
goto fail;
}
status = nla_recv_pdu(nla, s);
const int status2 = nla_recv_pdu(nla, s);
if (status < 0)
if (status2 < 0)
goto fail;
}
@ -635,11 +628,9 @@ fail:
static int nla_server_init(rdpNla* nla)
{
rdpTls* tls;
WINPR_ASSERT(nla);
tls = transport_get_tls(nla->transport);
rdpTls* tls = transport_get_tls(nla->transport);
WINPR_ASSERT(tls);
if (!nla_sec_buffer_alloc_from_data(&nla->PublicKey, tls->PublicKey, 0, tls->PublicKeyLength))
@ -685,6 +676,8 @@ fail:
static BOOL nla_server_recv_credentials(rdpNla* nla)
{
WINPR_ASSERT(nla);
if (nla_server_recv(nla) < 0)
return FALSE;
@ -868,11 +861,9 @@ int nla_authenticate(rdpNla* nla)
static void ap_integer_increment_le(BYTE* number, size_t size)
{
size_t index;
WINPR_ASSERT(number || (size == 0));
for (index = 0; index < size; index++)
for (size_t index = 0; index < size; index++)
{
if (number[index] < 0xFF)
{
@ -889,11 +880,9 @@ static void ap_integer_increment_le(BYTE* number, size_t size)
static void ap_integer_decrement_le(BYTE* number, size_t size)
{
size_t index;
WINPR_ASSERT(number || (size == 0));
for (index = 0; index < size; index++)
for (size_t index = 0; index < size; index++)
{
if (number[index] > 0)
{
@ -910,14 +899,14 @@ static void ap_integer_decrement_le(BYTE* number, size_t size)
BOOL nla_encrypt_public_key_echo(rdpNla* nla)
{
BOOL status;
BOOL status = FALSE;
WINPR_ASSERT(nla);
sspi_SecBufferFree(&nla->pubKeyAuth);
if (nla->server)
{
SecBuffer buf;
SecBuffer buf = { 0 };
if (!sspi_SecBufferAlloc(&buf, nla->PublicKey.cbBuffer))
return FALSE;
ap_integer_increment_le(buf.pvBuffer, buf.cbBuffer);
@ -937,7 +926,7 @@ BOOL nla_encrypt_public_key_hash(rdpNla* nla)
{
BOOL status = FALSE;
WINPR_DIGEST_CTX* sha256 = NULL;
SecBuffer buf;
SecBuffer buf = { 0 };
WINPR_ASSERT(nla);
@ -1021,7 +1010,7 @@ fail:
BOOL nla_decrypt_public_key_hash(rdpNla* nla)
{
WINPR_DIGEST_CTX* sha256 = NULL;
BYTE serverClientHash[WINPR_SHA256_DIGEST_LENGTH];
BYTE serverClientHash[WINPR_SHA256_DIGEST_LENGTH] = { 0 };
BOOL status = FALSE;
WINPR_ASSERT(nla);
@ -1073,10 +1062,11 @@ fail:
static BOOL nla_read_ts_credentials(rdpNla* nla, SecBuffer* data)
{
WinPrAsn1Decoder dec, dec2;
WinPrAsn1_OctetString credentials;
BOOL error;
WinPrAsn1_INTEGER credType;
WinPrAsn1Decoder dec = { 0 };
WinPrAsn1Decoder dec2 = { 0 };
WinPrAsn1_OctetString credentials = { 0 };
BOOL error = FALSE;
WinPrAsn1_INTEGER credType = -1;
WINPR_ASSERT(nla);
WINPR_ASSERT(data);
@ -1100,9 +1090,9 @@ static BOOL nla_read_ts_credentials(rdpNla* nla, SecBuffer* data)
if (credType == 1)
{
WinPrAsn1_OctetString domain;
WinPrAsn1_OctetString username;
WinPrAsn1_OctetString password;
WinPrAsn1_OctetString domain = { 0 };
WinPrAsn1_OctetString username = { 0 };
WinPrAsn1_OctetString password = { 0 };
/* TSPasswordCreds */
if (!WinPrAsn1DecReadSequence(&dec, &dec2))
@ -1121,9 +1111,9 @@ static BOOL nla_read_ts_credentials(rdpNla* nla, SecBuffer* data)
if (!WinPrAsn1DecReadContextualOctetString(&dec, 2, &error, &password, FALSE))
return FALSE;
if (sspi_SetAuthIdentityWithLengthW(nla->identity, (WCHAR*)username.data,
username.len / sizeof(WCHAR), (WCHAR*)domain.data,
domain.len / sizeof(WCHAR), (WCHAR*)password.data,
if (sspi_SetAuthIdentityWithLengthW(nla->identity, (const WCHAR*)username.data,
username.len / sizeof(WCHAR), (const WCHAR*)domain.data,
domain.len / sizeof(WCHAR), (const WCHAR*)password.data,
password.len / sizeof(WCHAR)) < 0)
return FALSE;
}
@ -1140,17 +1130,16 @@ static BOOL nla_read_ts_credentials(rdpNla* nla, SecBuffer* data)
static BOOL nla_encode_ts_credentials(rdpNla* nla)
{
rdpSettings* settings;
BOOL ret = FALSE;
WinPrAsn1Encoder* enc;
size_t length;
wStream s;
int credType;
WinPrAsn1Encoder* enc = NULL;
size_t length = 0;
wStream s = { 0 };
int credType = -1;
WINPR_ASSERT(nla);
WINPR_ASSERT(nla->rdpcontext);
settings = nla->rdpcontext->settings;
rdpSettings* settings = nla->rdpcontext->settings;
WINPR_ASSERT(settings);
enc = WinPrAsn1Encoder_New(WINPR_ASN1_DER);
@ -1349,7 +1338,7 @@ static BOOL nla_write_octet_string(WinPrAsn1Encoder* enc, const SecBuffer* buffe
static BOOL nla_write_octet_string_free(WinPrAsn1Encoder* enc, SecBuffer* buffer,
WinPrAsn1_tagId tagId, const char* msg)
{
BOOL rc = nla_write_octet_string(enc, buffer, tagId, msg);
const BOOL rc = nla_write_octet_string(enc, buffer, tagId, msg);
sspi_SecBufferFree(buffer);
return rc;
}
@ -1461,10 +1450,8 @@ static int nla_decode_ts_request(rdpNla* nla, wStream* s)
{
WinPrAsn1Decoder dec = { 0 };
WinPrAsn1Decoder dec2 = { 0 };
WinPrAsn1Decoder dec3 = { 0 };
BOOL error = FALSE;
WinPrAsn1_tagId tag = { 0 };
WinPrAsn1_OctetString octet_string = { 0 };
WinPrAsn1_INTEGER val = { 0 };
UINT32 version = 0;
@ -1504,6 +1491,9 @@ static int nla_decode_ts_request(rdpNla* nla, wStream* s)
while (WinPrAsn1DecReadContextualTag(&dec, &tag, &dec2) != 0)
{
WinPrAsn1Decoder dec3 = { 0 };
WinPrAsn1_OctetString octet_string = { 0 };
switch (tag)
{
case 1:
@ -1634,11 +1624,10 @@ int nla_recv_pdu(rdpNla* nla, wStream* s)
int nla_server_recv(rdpNla* nla)
{
int status = -1;
wStream* s;
WINPR_ASSERT(nla);
s = nla_server_recv_stream(nla);
wStream* s = nla_server_recv_stream(nla);
if (!s)
goto fail;
status = nla_decode_ts_request(nla, s);
@ -1659,15 +1648,14 @@ fail:
rdpNla* nla_new(rdpContext* context, rdpTransport* transport)
{
rdpNla* nla = (rdpNla*)calloc(1, sizeof(rdpNla));
rdpSettings* settings;
WINPR_ASSERT(transport);
WINPR_ASSERT(context);
settings = context->settings;
rdpSettings* settings = context->settings;
WINPR_ASSERT(settings);
rdpNla* nla = (rdpNla*)calloc(1, sizeof(rdpNla));
if (!nla)
return NULL;