未验证 提交 a04ab13c 编写于 作者: O openharmony_ci 提交者: Gitee

!1152 修复获取容器信息失败

Merge pull request !1152 from zhushengle/container_bug
......@@ -103,6 +103,8 @@ static ssize_t ProcessContainerLink(unsigned int containerID, ContainerType type
static ssize_t ProcessContainerReadLink(struct ProcDirEntry *entry, char *buffer, size_t bufLen)
{
char *freeBuf = NULL;
char *buf = buffer;
ssize_t count;
unsigned int intSave;
if (entry == NULL) {
......@@ -112,17 +114,41 @@ static ssize_t ProcessContainerReadLink(struct ProcDirEntry *entry, char *buffer
if (data == NULL) {
return -EINVAL;
}
if (LOS_IsUserAddressRange((VADDR_T)(UINTPTR)buffer, bufLen)) {
buf = LOS_MemAlloc(m_aucSysMem1, bufLen);
if (buf == NULL) {
return -ENOMEM;
}
(void)memset_s(buf, bufLen, 0, bufLen);
freeBuf = buf;
}
LosProcessCB *processCB = ProcGetProcessCB(data);
SCHEDULER_LOCK(intSave);
UINT32 containerID = OsGetContainerID(processCB, (ContainerType)data->type);
SCHEDULER_UNLOCK(intSave);
if (containerID != OS_INVALID_VALUE) {
return ProcessContainerLink(containerID, (ContainerType)data->type, buffer, bufLen);
count = ProcessContainerLink(containerID, (ContainerType)data->type, buf, bufLen);
} else {
count = strlen("(unknown)");
if (memcpy_s(buf, bufLen, "(unknown)", count + 1) != EOK) {
(void)LOS_MemFree(m_aucSysMem1, freeBuf);
return -EBADF;
}
}
count = strlen("(unknown)");
if (memcpy_s(buffer, bufLen, "(unknown)", count + 1) != EOK) {
return -EBADF;
if (count < 0) {
(void)LOS_MemFree(m_aucSysMem1, freeBuf);
return count;
}
if (LOS_IsUserAddressRange((VADDR_T)(UINTPTR)buffer, bufLen)) {
if (LOS_ArchCopyToUser(buffer, buf, bufLen) != 0) {
(void)LOS_MemFree(m_aucSysMem1, freeBuf);
return -EFAULT;
}
}
(void)LOS_MemFree(m_aucSysMem1, freeBuf);
return count;
}
......
......@@ -138,7 +138,7 @@ int VnodeAlloc(struct VnodeOps *vop, struct Vnode **newVnode)
VnodeHold();
vnode = GetFromFreeList();
if ((vnode == NULL) && g_totalVnodeSize < LOSCFG_MAX_VNODE_SIZE) {
vnode = (struct Vnode*)zalloc(sizeof(struct Vnode));
vnode = (struct Vnode *)zalloc(sizeof(struct Vnode));
g_totalVnodeSize++;
}
......
......@@ -321,7 +321,7 @@ static unsigned int ProcRealProcessIDGet(unsigned int pid)
SCHEDULER_LOCK(intSave);
LosProcessCB *pcb = OsGetPCBFromVpid(pid);
if (pcb == NULL) {
if (OsProcessIsInactive(pcb)) {
SCHEDULER_UNLOCK(intSave);
return 0;
}
......
......@@ -30,19 +30,13 @@
#include <gtest/gtest.h>
#include "It_process_fs_test.h"
static const int ini_process_max = 3;
void ItProcessFs013(void)
{
std::string path;
DIR *dirp = nullptr;
for (int i = 1; i <= ini_process_max; i++) {
if (i != 2) { /* 2: skip kernel process */
path = GenProcPidPath(i);
printf("path: %s\n", path.c_str());
dirp = opendir(path.data());
ASSERT_NE(dirp, nullptr);
(void)closedir(dirp);
};
}
path = GenProcPidPath(1);
printf("path: %s\n", path.c_str());
dirp = opendir(path.data());
ASSERT_NE(dirp, nullptr);
(void)closedir(dirp);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册