!1194 解决UAF问题

Merge pull request !1194 from hw_llm/master
This commit is contained in:
openharmony_ci 2024-07-11 13:32:59 +00:00 committed by Gitee
commit 49ad79f55e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
1 changed files with 7 additions and 3 deletions

View File

@ -270,6 +270,7 @@ STATIC INT32 DoMqueueClose(struct mqpersonal *privateMqPersonal)
{ {
struct mqarray *mqueueCB = NULL; struct mqarray *mqueueCB = NULL;
struct mqpersonal *tmp = NULL; struct mqpersonal *tmp = NULL;
INT32 ret;
mqueueCB = privateMqPersonal->mq_posixdes; mqueueCB = privateMqPersonal->mq_posixdes;
if (mqueueCB == NULL || mqueueCB->mq_personal == NULL) { if (mqueueCB == NULL || mqueueCB->mq_personal == NULL) {
@ -277,6 +278,12 @@ STATIC INT32 DoMqueueClose(struct mqpersonal *privateMqPersonal)
return LOS_NOK; return LOS_NOK;
} }
if ((mqueueCB->unlinkflag == TRUE) && (privateMqPersonal->mq_next == NULL)) {
ret = DoMqueueDelete(mqueueCB);
if (ret < 0) {
return ret;
}
}
/* find the personal and remove */ /* find the personal and remove */
if (mqueueCB->mq_personal == privateMqPersonal) { if (mqueueCB->mq_personal == privateMqPersonal) {
mqueueCB->mq_personal = privateMqPersonal->mq_next; mqueueCB->mq_personal = privateMqPersonal->mq_next;
@ -298,9 +305,6 @@ STATIC INT32 DoMqueueClose(struct mqpersonal *privateMqPersonal)
/* free the personal */ /* free the personal */
(VOID)LOS_MemFree(OS_SYS_MEM_ADDR, privateMqPersonal); (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, privateMqPersonal);
if ((mqueueCB->unlinkflag == TRUE) && (mqueueCB->mq_personal == NULL)) {
return DoMqueueDelete(mqueueCB);
}
return LOS_OK; return LOS_OK;
} }