!6674 The session key in the UDP channel of the transport module is not released after being used

Merge pull request !6674 from Zhangzi/master
This commit is contained in:
openharmony_ci 2024-06-23 07:57:40 +00:00 committed by Gitee
commit 2bd54a2ba9
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 19 additions and 1 deletions

View File

@ -69,6 +69,8 @@ static void NotifyTimeOutUdpChannel(ListNode *udpChannelList)
if (udpChannel->info.fastTransData != NULL) {
SoftBusFree((void *)udpChannel->info.fastTransData);
}
(void)memset_s(udpChannel->info.sessionKey, sizeof(udpChannel->info.sessionKey), 0,
sizeof(udpChannel->info.sessionKey));
SoftBusFree(udpChannel);
}
}
@ -142,6 +144,8 @@ void TransUdpChannelMgrDeinit(void)
if (udpChannel->info.fastTransData != NULL) {
SoftBusFree((void *)udpChannel->info.fastTransData);
}
(void)memset_s(udpChannel->info.sessionKey, sizeof(udpChannel->info.sessionKey), 0,
sizeof(udpChannel->info.sessionKey));
SoftBusFree(udpChannel);
}
(void)SoftBusMutexUnlock(&g_udpChannelMgr->lock);
@ -208,6 +212,8 @@ int32_t TransDelUdpChannel(int32_t channelId)
if (udpChannelNode->info.fastTransData != NULL) {
SoftBusFree((void *)(udpChannelNode->info.fastTransData));
}
(void)memset_s(udpChannelNode->info.sessionKey, sizeof(udpChannelNode->info.sessionKey), 0,
sizeof(udpChannelNode->info.sessionKey));
SoftBusFree(udpChannelNode);
g_udpChannelMgr->cnt--;
(void)SoftBusMutexUnlock(&(g_udpChannelMgr->lock));
@ -231,6 +237,8 @@ static void NotifyUdpChannelCloseInList(ListNode *udpChannelList)
if (udpChannel->info.fastTransData != NULL) {
SoftBusFree((void *)(udpChannel->info.fastTransData));
}
(void)memset_s(udpChannel->info.sessionKey, sizeof(udpChannel->info.sessionKey), 0,
sizeof(udpChannel->info.sessionKey));
SoftBusFree(udpChannel);
}
}

View File

@ -602,6 +602,7 @@ static void TransOnExchangeUdpInfoReply(int64_t authId, int64_t seq, const cJSON
}
TransUpdateUdpChannelInfo(seq, &(channel.info));
ret = ProcessUdpChannelState(&(channel.info), false);
(void)memset_s(channel.info.sessionKey, sizeof(channel.info.sessionKey), 0, sizeof(channel.info.sessionKey));
if (ret != SOFTBUS_OK) {
TRANS_LOGE(TRANS_CTRL,
"process udp channelId=%{public}" PRId64 " failed, close peer", channel.info.myData.channelId);
@ -796,6 +797,8 @@ static void UdpOnAuthConnOpened(uint32_t requestId, AuthHandle authHandle)
}
extra.channelId = (int32_t)channel->info.myData.channelId;
ret = StartExchangeUdpInfo(channel, authHandle, channel->seq);
(void)memset_s(channel->info.sessionKey, sizeof(channel->info.sessionKey), 0,
sizeof(channel->info.sessionKey));
if (ret != SOFTBUS_OK) {
channel->errCode = ret;
TRANS_LOGE(TRANS_CTRL, "neg fail");
@ -828,7 +831,10 @@ static void UdpOnAuthConnOpenFailed(uint32_t requestId, int32_t reason)
TRANS_LOGE(TRANS_CTRL, "malloc fail");
return;
}
if (TransGetUdpChannelByRequestId(requestId, channel) != SOFTBUS_OK) {
int32_t ret = TransGetUdpChannelByRequestId(requestId, channel);
(void)memset_s(channel->info.sessionKey, sizeof(channel->info.sessionKey), 0,
sizeof(channel->info.sessionKey));
if (ret != SOFTBUS_OK) {
TRANS_LOGE(TRANS_CTRL, "UdpOnAuthConnOpened get channel fail");
SoftBusFree(channel);
return;
@ -863,6 +869,8 @@ static void TransCloseUdpChannelByRequestId(uint32_t requestId)
SoftBusFree(channel);
return;
}
(void)memset_s(channel->info.sessionKey, sizeof(channel->info.sessionKey), 0,
sizeof(channel->info.sessionKey));
ProcessAbnormalUdpChannelState(&channel->info, SOFTBUS_TRANS_OPEN_AUTH_CONN_FAILED, true);
SoftBusFree(channel);
TRANS_LOGD(TRANS_CTRL, "ok");
@ -875,6 +883,7 @@ static int32_t CheckAuthConnStatus(const uint32_t requestId)
TRANS_LOGE(TRANS_CTRL, "get channel fail");
return SOFTBUS_TRANS_UDP_GET_CHANNEL_FAILED;
}
(void)memset_s(channel.info.sessionKey, sizeof(channel.info.sessionKey), 0, sizeof(channel.info.sessionKey));
return channel.errCode;
}
@ -1058,6 +1067,7 @@ int32_t TransCloseUdpChannel(int32_t channelId)
TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_CTRL, "set udp channel close type failed.");
ret = TransGetUdpChannelById(channelId, &channel);
(void)memset_s(channel.info.sessionKey, sizeof(channel.info.sessionKey), 0, sizeof(channel.info.sessionKey));
if (ret != SOFTBUS_OK) {
TRANS_LOGE(TRANS_CTRL, "get udp channel by channel id failed. channelId=%{public}d", channelId);
return ret;