Skip to content

Commit 5713f54

Browse files
authored
fix invalid read (#31525)
1 parent e0608d7 commit 5713f54

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

source/common/src/msg/tmsg.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,6 @@ static int32_t tSerializeSClientHbReq(SEncoder *pEncoder, const SClientHbReq *pR
311311
}
312312
TAOS_CHECK_RETURN(tEncodeU32(pEncoder, pReq->userIp));
313313
TAOS_CHECK_RETURN(tEncodeCStr(pEncoder, pReq->userApp));
314-
TAOS_CHECK_RETURN(tSerializeIpRange(pEncoder, (SIpRange *)&pReq->userDualIp));
315314

316315
return 0;
317316
}
@@ -443,10 +442,6 @@ static int32_t tDeserializeSClientHbReq(SDecoder *pDecoder, SClientHbReq *pReq)
443442
TAOS_CHECK_GOTO(tDecodeCStrTo(pDecoder, pReq->userApp), &line, _error);
444443
}
445444

446-
if (!tDecodeIsEnd(pDecoder)) {
447-
TAOS_CHECK_GOTO(tDeserializeIpRange(pDecoder, (SIpRange *)&pReq->userDualIp), &line, _error);
448-
}
449-
450445
_error:
451446
if (code != 0) {
452447
tFreeClientHbReq(pReq);
@@ -551,6 +546,12 @@ int32_t tSerializeSClientHbBatchReq(void *buf, int32_t bufLen, const SClientHbBa
551546
}
552547

553548
TAOS_CHECK_EXIT(tEncodeI64(&encoder, pBatchReq->ipWhiteListVer));
549+
550+
for (int32_t i = 0; i < reqNum; i++) {
551+
SClientHbReq *pReq = taosArrayGet(pBatchReq->reqs, i);
552+
TAOS_CHECK_EXIT(tSerializeIpRange(&encoder, (SIpRange *)&pReq->userDualIp));
553+
}
554+
554555
tEndEncode(&encoder);
555556

556557
_exit:
@@ -592,6 +593,12 @@ int32_t tDeserializeSClientHbBatchReq(void *buf, int32_t bufLen, SClientHbBatchR
592593
TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBatchReq->ipWhiteListVer));
593594
}
594595

596+
if (!tDecodeIsEnd(&decoder)) {
597+
for (int32_t i = 0; i < reqNum; i++) {
598+
SClientHbReq *pReq = taosArrayGet(pBatchReq->reqs, i);
599+
TAOS_CHECK_EXIT(tDeserializeIpRange(&decoder, (SIpRange *)&pReq->userDualIp));
600+
}
601+
}
595602
tEndDecode(&decoder);
596603

597604
_exit:

source/dnode/mgmt/node_mgmt/src/dmTransport.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ static void dmUpdateRpcIpWhite(SDnodeData *pData, void *pTrans, SRpcMsg *pRpc) {
103103

104104
rpcFreeCont(pRpc->pCont);
105105
}
106+
107+
static void dmUpdateRpcIpWhiteUnused(SDnodeData *pDnode, void *pTrans, SRpcMsg *pRpc) {
108+
int32_t code = TSDB_CODE_INVALID_MSG;
109+
dError("failed to update rpc ip-white since: %s", tstrerror(code));
110+
rpcFreeCont(pRpc->pCont);
111+
pRpc->pCont = NULL;
112+
return;
113+
}
106114
static bool dmIsForbiddenIp(int8_t forbidden, char *user, SIpAddr *clientIp) {
107115
if (forbidden) {
108116
dError("User:%s host:%s not in ip white list", user, IP_ADDR_STR(clientIp));
@@ -169,7 +177,7 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
169177
}
170178
break;
171179
case TDMT_MND_RETRIEVE_IP_WHITE_RSP:
172-
dmUpdateRpcIpWhite(&pDnode->data, pTrans->serverRpc, pRpc);
180+
dmUpdateRpcIpWhiteUnused(&pDnode->data, pTrans->serverRpc, pRpc);
173181
return;
174182
case TDMT_MND_RETRIEVE_IP_WHITE_DUAL_RSP:
175183
dmUpdateRpcIpWhite(&pDnode->data, pTrans->serverRpc, pRpc);

0 commit comments

Comments
 (0)