Addressed issues found during the SuSE security review.
This commit is contained in:
@@ -343,7 +343,7 @@ InternalRpc(
|
||||
IN long flags,
|
||||
IN char *pRequestData,
|
||||
INOUT char **ppResponseData,
|
||||
INOUT int *pResponseDataLen)
|
||||
INOUT size_t *pResponseDataLen)
|
||||
//
|
||||
// Arguments:
|
||||
//
|
||||
@@ -467,9 +467,9 @@ InternalRpc(
|
||||
// Check that the request completed successfully
|
||||
if (memcmp(httpCompStatus, L"200", sizeof(httpCompStatus)) == 0)
|
||||
{
|
||||
char *pResponseData;
|
||||
int responseDataBufSize = INITIAL_RESPONSE_DATA_BUF_SIZE;
|
||||
int responseDataRead = 0;
|
||||
char *pResponseData;
|
||||
size_t responseDataBufSize = INITIAL_RESPONSE_DATA_BUF_SIZE;
|
||||
size_t responseDataRead = 0;
|
||||
|
||||
// Now read the response data, to do so we need to allocate a buffer.
|
||||
pResponseData = (char*) malloc(INITIAL_RESPONSE_DATA_BUF_SIZE);
|
||||
@@ -494,22 +494,43 @@ InternalRpc(
|
||||
{
|
||||
char *pTmpBuf;
|
||||
|
||||
// We need to upgrade the receive buffer
|
||||
pTmpBuf = (char*) malloc(responseDataBufSize + INCREMENT_RESPONSE_DATA_BUF_SIZE);
|
||||
if (pTmpBuf)
|
||||
// We need to upgrade the receive buffer.
|
||||
//
|
||||
// Do not allow the reply to exceed our maximum
|
||||
if (responseDataBufSize < MAX_RPC_REPLY_SZ)
|
||||
{
|
||||
memcpy(pTmpBuf, pResponseData, responseDataBufSize);
|
||||
free(pResponseData);
|
||||
pResponseData = pTmpBuf;
|
||||
pCurrLocation = pResponseData + responseDataBufSize;
|
||||
responseDataBufSize += INCREMENT_RESPONSE_DATA_BUF_SIZE;
|
||||
size_t incrementSz;
|
||||
|
||||
// Determine the buffer size imcrement so that the maximum rpc reply
|
||||
// size is not exceeded.
|
||||
if ((responseDataBufSize + INCREMENT_RESPONSE_DATA_BUF_SIZE) <= MAX_RPC_REPLY_SZ)
|
||||
incrementSz = INCREMENT_RESPONSE_DATA_BUF_SIZE;
|
||||
else
|
||||
incrementSz = MAX_RPC_REPLY_SZ - responseDataBufSize;
|
||||
|
||||
pTmpBuf = (char*) malloc(responseDataBufSize + incrementSz);
|
||||
if (pTmpBuf)
|
||||
{
|
||||
memcpy(pTmpBuf, pResponseData, responseDataBufSize);
|
||||
free(pResponseData);
|
||||
pResponseData = pTmpBuf;
|
||||
pCurrLocation = pResponseData + responseDataBufSize;
|
||||
responseDataBufSize += incrementSz;
|
||||
}
|
||||
else
|
||||
{
|
||||
DbgTrace(0, "-InternalRpc- Buffer allocation failure\n", 0);
|
||||
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
|
||||
CASA_FACILITY_AUTHTOKEN,
|
||||
CASA_STATUS_INSUFFICIENT_RESOURCES);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DbgTrace(0, "-InternalRpc- Buffer allocation failure\n", 0);
|
||||
DbgTrace(0, "-InternalRpc- Reply maximum exceeded\n", 0);
|
||||
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
|
||||
CASA_FACILITY_AUTHTOKEN,
|
||||
CASA_STATUS_INSUFFICIENT_RESOURCES);
|
||||
CASA_STATUS_UNSUCCESSFUL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -743,7 +764,7 @@ Rpc(
|
||||
IN long flags,
|
||||
IN char *pRequestData,
|
||||
INOUT char **ppResponseData,
|
||||
INOUT int *pResponseDataLen)
|
||||
INOUT size_t *pResponseDataLen)
|
||||
//
|
||||
// Arguments:
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user