Changes to address issues brought up by the security review.
This commit is contained in:
@@ -390,9 +390,9 @@ CChannel::connectionThread(
|
||||
{
|
||||
CChannel *pCChannel = *pSmartCChannel;
|
||||
bool doneReceivingData = false;
|
||||
int32_t bytesReceived;
|
||||
size_t bytesReceived;
|
||||
uint32_t reqId;
|
||||
int32_t payloadLength;
|
||||
uint32_t payloadLength;
|
||||
unsigned long totalPayloadBytesReceived = 0;
|
||||
char reqDataPktHdr[ReqDataPktHdrTemplate.length()];
|
||||
char *pRecvBuff;
|
||||
@@ -747,7 +747,7 @@ CChannel::submitReq(
|
||||
uint32_t reqId,
|
||||
ClientReq &clientReq,
|
||||
char *pClientData,
|
||||
int32_t clientDataLen)
|
||||
uint32_t clientDataLen)
|
||||
//
|
||||
// Arguments:
|
||||
//
|
||||
|
||||
@@ -222,7 +222,7 @@ public:
|
||||
int submitReq(uint32_t reqId,
|
||||
ClientReq &clientReq,
|
||||
char *pClientData,
|
||||
int32_t clientDataLen);
|
||||
uint32_t clientDataLen);
|
||||
|
||||
//
|
||||
// Remove Request routine
|
||||
@@ -237,30 +237,6 @@ public:
|
||||
//
|
||||
void removeReq(uint32_t reqId);
|
||||
|
||||
//
|
||||
// Send Data routine
|
||||
//
|
||||
// Parameters:
|
||||
// reqId (input) -
|
||||
// Id of the Request.
|
||||
//
|
||||
// pClientData (input) -
|
||||
// Pointer to client data that must be sent to
|
||||
// the server. Buffer is NEVER released
|
||||
// by the procedure.
|
||||
//
|
||||
// clientDataLen (input) -
|
||||
// Length of the client data.
|
||||
//
|
||||
//
|
||||
// Abstract: Sends data to the server for a previously
|
||||
// submitted Request.
|
||||
//
|
||||
// Returns: 0 if successful.
|
||||
//
|
||||
int sendData(uint32_t reqId,
|
||||
char *pClientData,
|
||||
int clientDataLen);
|
||||
};
|
||||
typedef SmartPtr<CChannel> SmartCChannel;
|
||||
|
||||
|
||||
@@ -152,22 +152,36 @@ IpcClientOpenUnixRemoteEndPoint(
|
||||
pSocketFileName));
|
||||
|
||||
// Allocate a handle for the endpoint
|
||||
uint32_t handle = remoteEndPointHandleAllocator ++;
|
||||
uint32_t handle = remoteEndPointHandleAllocator + 1;
|
||||
|
||||
// Insert the new RemoteEndPoint into the REP map
|
||||
REPIterBoolPair insertResult;
|
||||
insertResult = repMap.insert(make_pair(handle, pSmartRemoteEndPoint));
|
||||
if (!insertResult.second)
|
||||
// Protect against wrap-around
|
||||
if (handle != 0)
|
||||
{
|
||||
// Insertion failed
|
||||
DbgTrace(0, "IpcClientOpenUnixRemoteEndPoint- Unable to insert RemoteEndPoint into REP\n", 0);
|
||||
delete pSmartRemoteEndPoint;
|
||||
// Insert the new RemoteEndPoint into the REP map
|
||||
REPIterBoolPair insertResult;
|
||||
insertResult = repMap.insert(make_pair(handle, pSmartRemoteEndPoint));
|
||||
if (!insertResult.second)
|
||||
{
|
||||
// Insertion failed
|
||||
DbgTrace(0, "IpcClientOpenUnixRemoteEndPoint- Unable to insert RemoteEndPoint into REP\n", 0);
|
||||
delete pSmartRemoteEndPoint;
|
||||
}
|
||||
else
|
||||
{
|
||||
// RemoteEndPoint inserted in the REP map, success.
|
||||
//
|
||||
// Consume the allocated handle
|
||||
remoteEndPointHandleAllocator ++;
|
||||
*pEndPointHandle = handle;
|
||||
|
||||
retStatus = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// RemoteEndPoint inserted in the REP map, success.
|
||||
*pEndPointHandle = handle;
|
||||
retStatus = 0;
|
||||
// Handle allocator wrap-around prevented
|
||||
DbgTrace(0, "IpcClientOpenUnixRemoteEndPoint- Handle allocator wrap-around prevented\n", 0);
|
||||
delete pSmartRemoteEndPoint;
|
||||
}
|
||||
} catch (...) {
|
||||
DbgTrace(0, "IpcClientOpenUnixRemoteEndPoint- Exception caught\n", 0);
|
||||
@@ -254,22 +268,35 @@ IpcClientOpenInetRemoteEndPoint(
|
||||
address));
|
||||
|
||||
// Allocate a handle for the endpoint
|
||||
uint32_t handle = remoteEndPointHandleAllocator ++;
|
||||
uint32_t handle = remoteEndPointHandleAllocator + 1;
|
||||
|
||||
// Insert the new RemoteEndPoint into the REP map
|
||||
REPIterBoolPair insertResult;
|
||||
insertResult = repMap.insert(make_pair(handle, pSmartRemoteEndPoint));
|
||||
if (!insertResult.second)
|
||||
// Protect against wrap-around
|
||||
if (handle != 0)
|
||||
{
|
||||
// Insertion failed
|
||||
DbgTrace(0, "IpcClientOpenInetRemoteEndPoint- Unable to insert RemoteEndPoint into REP\n", 0);
|
||||
delete pSmartRemoteEndPoint;
|
||||
// Insert the new RemoteEndPoint into the REP map
|
||||
REPIterBoolPair insertResult;
|
||||
insertResult = repMap.insert(make_pair(handle, pSmartRemoteEndPoint));
|
||||
if (!insertResult.second)
|
||||
{
|
||||
// Insertion failed
|
||||
DbgTrace(0, "IpcClientOpenInetRemoteEndPoint- Unable to insert RemoteEndPoint into REP\n", 0);
|
||||
delete pSmartRemoteEndPoint;
|
||||
}
|
||||
else
|
||||
{
|
||||
// RemoteEndPoint inserted in the REP map, success.
|
||||
//
|
||||
// Consume the allocated handle
|
||||
remoteEndPointHandleAllocator ++;
|
||||
*pEndPointHandle = handle;
|
||||
retStatus = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// RemoteEndPoint inserted in the REP map, success.
|
||||
*pEndPointHandle = handle;
|
||||
retStatus = 0;
|
||||
// Handle allocator wrap-around prevented
|
||||
DbgTrace(0, "IpcClientOpenInetRemoteEndPoint- Handle allocator wrap-around prevented\n", 0);
|
||||
delete pSmartRemoteEndPoint;
|
||||
}
|
||||
} catch (...) {
|
||||
DbgTrace(0, "IpcClientOpenInetRemoteEndPoint- Exception caught\n", 0);
|
||||
@@ -366,9 +393,9 @@ int
|
||||
IpcClientSubmitReq(
|
||||
IN uint32_t endPointHandle,
|
||||
IN char *pClientData,
|
||||
IN int32_t clientDataLen,
|
||||
IN uint32_t clientDataLen,
|
||||
INOUT char **ppServerData,
|
||||
INOUT int32_t *pServerDataLen)
|
||||
INOUT uint32_t *pServerDataLen)
|
||||
//
|
||||
// Arguments In: endPointHandle - Handle of the remote endpoint that will
|
||||
// be the target of the request.
|
||||
|
||||
@@ -142,7 +142,7 @@ ClientReq::~ClientReq(void)
|
||||
void
|
||||
ClientReq::processServerData(
|
||||
char *pServerData,
|
||||
int32_t serverDataLength)
|
||||
uint32_t serverDataLength)
|
||||
//
|
||||
// Arguments:
|
||||
//
|
||||
@@ -230,7 +230,7 @@ ClientReq::processError(void)
|
||||
int
|
||||
ClientReq::waitForCompletion(
|
||||
char **ppResponseData,
|
||||
int32_t *pResponseDataLength)
|
||||
uint32_t *pResponseDataLength)
|
||||
//
|
||||
// Arguments:
|
||||
//
|
||||
|
||||
@@ -52,7 +52,7 @@ class ClientReq
|
||||
|
||||
// Server Data
|
||||
char *m_pServerData;
|
||||
int32_t m_serverDataLen;
|
||||
uint32_t m_serverDataLen;
|
||||
|
||||
// Flag indicating the state of the submitting
|
||||
// thread.
|
||||
@@ -114,7 +114,7 @@ public:
|
||||
// Returns: Nothing.
|
||||
//
|
||||
void processServerData(char *pServerData,
|
||||
int32_t serverDataLength);
|
||||
uint32_t serverDataLength);
|
||||
|
||||
//
|
||||
// Process Error routine
|
||||
@@ -147,7 +147,7 @@ public:
|
||||
// -1 == Request did not complete gracefully
|
||||
//
|
||||
int waitForCompletion(char **ppResponseData,
|
||||
int32_t *pResponseDataLength);
|
||||
uint32_t *pResponseDataLength);
|
||||
|
||||
//
|
||||
// Completion status
|
||||
|
||||
@@ -336,9 +336,9 @@ RemoteEndPoint::getCChannel(void)
|
||||
int
|
||||
RemoteEndPoint::submitReq(
|
||||
char *pClientData,
|
||||
int32_t clientDataLen,
|
||||
uint32_t clientDataLen,
|
||||
char **ppServerData,
|
||||
int32_t *pServerDataLen)
|
||||
uint32_t *pServerDataLen)
|
||||
//
|
||||
// Arguments:
|
||||
//
|
||||
|
||||
@@ -186,9 +186,9 @@ public:
|
||||
// Note: The routine blocks until the request completes.
|
||||
//
|
||||
int submitReq(char *pClientData,
|
||||
int32_t clientDataLen,
|
||||
uint32_t clientDataLen,
|
||||
char **ppServerData,
|
||||
int32_t *pServerDataLen);
|
||||
uint32_t *pServerDataLen);
|
||||
};
|
||||
typedef SmartPtr<RemoteEndPoint> SmartRemoteEndPoint;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user