提交 338f5d7e 编写于 作者: Z zhushengle

fix: 修复获取容器信息失败

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