fix: 修复获取容器信息失败
Signed-off-by: zhushengle <zhushengle@huawei.com> Change-Id: Ie612d14337f7c24812c74f1510c0a8e6fca1c200
This commit is contained in:
parent
5fb9165c08
commit
338f5d7e7d
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue