fix: syscall review bugfix
close: #149BPF Signed-off-by: mucor <mucorwang@gmail.com>
This commit is contained in:
parent
19b39b1bff
commit
214f44e935
|
@ -686,7 +686,6 @@ int VfsJffs2Symlink(struct Vnode *parentVnode, struct Vnode **newVnode, const ch
|
|||
|
||||
ssize_t VfsJffs2Readlink(struct Vnode *vnode, char *buffer, size_t bufLen)
|
||||
{
|
||||
ssize_t ret = 0;
|
||||
struct jffs2_inode *inode = NULL;
|
||||
struct jffs2_inode_info *f = NULL;
|
||||
ssize_t targetLen;
|
||||
|
@ -705,14 +704,12 @@ ssize_t VfsJffs2Readlink(struct Vnode *vnode, char *buffer, size_t bufLen)
|
|||
cnt = (bufLen - 1) < targetLen ? (bufLen - 1) : targetLen;
|
||||
if (LOS_CopyFromKernel(buffer, bufLen, (const char *)f->target, cnt) != 0) {
|
||||
cnt = 0;
|
||||
ret = -EFAULT;
|
||||
LOS_MuxUnlock(&g_jffs2FsLock);
|
||||
return -EFAULT;
|
||||
}
|
||||
buffer[cnt] = '\0';
|
||||
|
||||
LOS_MuxUnlock(&g_jffs2FsLock);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
|
|
@ -59,10 +59,6 @@ void FileTableUnLock(struct fd_table_s *fdt)
|
|||
|
||||
static int AssignProcessFd(const struct fd_table_s *fdt, int minFd)
|
||||
{
|
||||
if (fdt == NULL) {
|
||||
return VFS_ERROR;
|
||||
}
|
||||
|
||||
if (minFd >= fdt->max_fds) {
|
||||
set_errno(EINVAL);
|
||||
return VFS_ERROR;
|
||||
|
|
|
@ -128,6 +128,7 @@ struct PathCache *PathCacheAlloc(struct Vnode *parent, struct Vnode *vnode, cons
|
|||
|
||||
ret = strncpy_s(pc->name, len + 1, name, len);
|
||||
if (ret != LOS_OK) {
|
||||
free(pc);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -450,8 +450,16 @@ OUT:
|
|||
int SysSymlink(const char *target, const char *linkpath)
|
||||
{
|
||||
int ret;
|
||||
char *targetRet = NULL;
|
||||
char *pathRet = NULL;
|
||||
|
||||
if (target != NULL) {
|
||||
ret = UserPathCopy(target, &targetRet);
|
||||
if (ret != 0) {
|
||||
goto OUT;
|
||||
}
|
||||
}
|
||||
|
||||
if (linkpath != NULL) {
|
||||
ret = UserPathCopy(linkpath, &pathRet);
|
||||
if (ret != 0) {
|
||||
|
@ -459,7 +467,7 @@ int SysSymlink(const char *target, const char *linkpath)
|
|||
}
|
||||
}
|
||||
|
||||
ret = symlink(target, pathRet);
|
||||
ret = symlink(targetRet, pathRet);
|
||||
if (ret < 0) {
|
||||
ret = -get_errno();
|
||||
}
|
||||
|
@ -468,6 +476,10 @@ OUT:
|
|||
if (pathRet != NULL) {
|
||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, pathRet);
|
||||
}
|
||||
|
||||
if (targetRet != NULL) {
|
||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, targetRet);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -606,6 +618,7 @@ int SysMount(const char *source, const char *target, const char *filesystemtype,
|
|||
int ret;
|
||||
char *sourceRet = NULL;
|
||||
char *targetRet = NULL;
|
||||
char *dataRet = NULL;
|
||||
char fstypeRet[FILESYSTEM_TYPE_MAX + 1] = {0};
|
||||
|
||||
if (!IsCapPermit(CAP_FS_MOUNT)) {
|
||||
|
@ -642,7 +655,14 @@ int SysMount(const char *source, const char *target, const char *filesystemtype,
|
|||
#endif
|
||||
}
|
||||
|
||||
ret = mount(sourceRet, targetRet, (filesystemtype ? fstypeRet : NULL), mountflags, data);
|
||||
if (data != NULL) {
|
||||
ret = UserPathCopy(data, &dataRet);
|
||||
if (ret != 0) {
|
||||
goto OUT;
|
||||
}
|
||||
}
|
||||
|
||||
ret = mount(sourceRet, targetRet, (filesystemtype ? fstypeRet : NULL), mountflags, dataRet);
|
||||
if (ret < 0) {
|
||||
ret = -get_errno();
|
||||
}
|
||||
|
@ -654,6 +674,9 @@ OUT:
|
|||
if (targetRet != NULL) {
|
||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, targetRet);
|
||||
}
|
||||
if (dataRet != NULL) {
|
||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, dataRet);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1327,9 +1350,12 @@ ssize_t SysReadv(int fd, const struct iovec *iov, int iovcnt)
|
|||
|
||||
/* Process fd convert to system global fd */
|
||||
fd = GetAssociatedSystemFd(fd);
|
||||
if ((iov == NULL) || (iovcnt <= 0) || (iovcnt > IOV_MAX)) {
|
||||
ret = vfs_readv(fd, iov, iovcnt, NULL);
|
||||
return -get_errno();
|
||||
if ((iov == NULL) || (iovcnt < 0) || (iovcnt > IOV_MAX)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (iovcnt == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = UserIovCopy(&iovRet, iov, iovcnt, &valid_iovcnt);
|
||||
|
@ -1363,6 +1389,11 @@ ssize_t SysWritev(int fd, const struct iovec *iov, int iovcnt)
|
|||
if ((iovcnt < 0) || (iovcnt > IOV_MAX)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (iovcnt == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (iov == NULL) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
@ -1545,21 +1576,26 @@ char *SysGetcwd(char *buf, size_t n)
|
|||
{
|
||||
char *ret = NULL;
|
||||
char *bufRet = NULL;
|
||||
size_t bufLen = n;
|
||||
int retVal;
|
||||
|
||||
bufRet = (char *)LOS_MemAlloc(OS_SYS_MEM_ADDR, n);
|
||||
if (bufLen > PATH_MAX) {
|
||||
bufLen = PATH_MAX;
|
||||
}
|
||||
|
||||
bufRet = (char *)LOS_MemAlloc(OS_SYS_MEM_ADDR, bufLen);
|
||||
if (bufRet == NULL) {
|
||||
return (char *)(intptr_t)-ENOMEM;
|
||||
}
|
||||
(void)memset_s(bufRet, n, 0, n);
|
||||
(void)memset_s(bufRet, bufLen, 0, bufLen);
|
||||
|
||||
ret = getcwd((buf ? bufRet : NULL), n);
|
||||
ret = getcwd((buf ? bufRet : NULL), bufLen);
|
||||
if (ret == NULL) {
|
||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, bufRet);
|
||||
return (char *)(intptr_t)-get_errno();
|
||||
}
|
||||
|
||||
retVal = LOS_ArchCopyToUser(buf, bufRet, n);
|
||||
retVal = LOS_ArchCopyToUser(buf, bufRet, bufLen);
|
||||
if (retVal != 0) {
|
||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, bufRet);
|
||||
return (char *)(intptr_t)-EFAULT;
|
||||
|
@ -1749,6 +1785,14 @@ int SysSymlinkat(const char *target, int dirfd, const char *linkpath)
|
|||
{
|
||||
int ret;
|
||||
char *pathRet = NULL;
|
||||
char *targetRet = NULL;
|
||||
|
||||
if (target != NULL) {
|
||||
ret = UserPathCopy(target, &targetRet);
|
||||
if (ret != 0) {
|
||||
goto OUT;
|
||||
}
|
||||
}
|
||||
|
||||
if (linkpath != NULL) {
|
||||
ret = UserPathCopy(linkpath, &pathRet);
|
||||
|
@ -1762,7 +1806,7 @@ int SysSymlinkat(const char *target, int dirfd, const char *linkpath)
|
|||
dirfd = GetAssociatedSystemFd(dirfd);
|
||||
}
|
||||
|
||||
ret = symlinkat(target, dirfd, pathRet);
|
||||
ret = symlinkat(targetRet, dirfd, pathRet);
|
||||
if (ret < 0) {
|
||||
ret = -get_errno();
|
||||
}
|
||||
|
@ -1771,6 +1815,10 @@ OUT:
|
|||
if (pathRet != NULL) {
|
||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, pathRet);
|
||||
}
|
||||
|
||||
if (targetRet != NULL) {
|
||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, targetRet);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1924,9 +1972,12 @@ ssize_t SysPreadv(int fd, const struct iovec *iov, int iovcnt, long loffset, lon
|
|||
|
||||
/* Process fd convert to system global fd */
|
||||
fd = GetAssociatedSystemFd(fd);
|
||||
if ((iov == NULL) || (iovcnt <= 0) || (iovcnt > IOV_MAX)) {
|
||||
ret = preadv(fd, iov, iovcnt, offsetflag);
|
||||
return -get_errno();
|
||||
if ((iov == NULL) || (iovcnt < 0) || (iovcnt > IOV_MAX)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (iovcnt == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = UserIovCopy(&iovRet, iov, iovcnt, &valid_iovcnt);
|
||||
|
@ -1959,9 +2010,12 @@ ssize_t SysPwritev(int fd, const struct iovec *iov, int iovcnt, long loffset, lo
|
|||
|
||||
/* Process fd convert to system global fd */
|
||||
fd = GetAssociatedSystemFd(fd);
|
||||
if ((iov == NULL) || (iovcnt <= 0) || (iovcnt > IOV_MAX)) {
|
||||
ret = pwritev(fd, iov, iovcnt, offsetflag);
|
||||
return -get_errno();
|
||||
if ((iov == NULL) || (iovcnt < 0) || (iovcnt > IOV_MAX)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (iovcnt == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = UserIovCopy(&iovRet, iov, iovcnt, &valid_iovcnt);
|
||||
|
@ -2480,7 +2534,7 @@ int SysPpoll(struct pollfd *fds, nfds_t nfds, const struct timespec *tmo_p, cons
|
|||
timeout = (tmo_p == NULL) ? -1 : (tmo_p->tv_sec * OS_SYS_US_PER_MS + tmo_p->tv_nsec / OS_SYS_NS_PER_MS);
|
||||
if (timeout & 0x80000000) {
|
||||
ret = -EINVAL;
|
||||
return ret;
|
||||
return ret;
|
||||
}
|
||||
setl.sig[0] = *sigMask;
|
||||
OsSigprocMask(SIG_SETMASK, &setl, &origMask);
|
||||
|
|
Loading…
Reference in New Issue