commit
8713997548
|
@ -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 VfsJffs2Readlink(struct Vnode *vnode, char *buffer, size_t bufLen)
|
||||||
{
|
{
|
||||||
ssize_t ret = 0;
|
|
||||||
struct jffs2_inode *inode = NULL;
|
struct jffs2_inode *inode = NULL;
|
||||||
struct jffs2_inode_info *f = NULL;
|
struct jffs2_inode_info *f = NULL;
|
||||||
ssize_t targetLen;
|
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;
|
cnt = (bufLen - 1) < targetLen ? (bufLen - 1) : targetLen;
|
||||||
if (LOS_CopyFromKernel(buffer, bufLen, (const char *)f->target, cnt) != 0) {
|
if (LOS_CopyFromKernel(buffer, bufLen, (const char *)f->target, cnt) != 0) {
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
ret = -EFAULT;
|
LOS_MuxUnlock(&g_jffs2FsLock);
|
||||||
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
buffer[cnt] = '\0';
|
buffer[cnt] = '\0';
|
||||||
|
|
||||||
LOS_MuxUnlock(&g_jffs2FsLock);
|
LOS_MuxUnlock(&g_jffs2FsLock);
|
||||||
if (ret < 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,10 +59,6 @@ void FileTableUnLock(struct fd_table_s *fdt)
|
||||||
|
|
||||||
static int AssignProcessFd(const struct fd_table_s *fdt, int minFd)
|
static int AssignProcessFd(const struct fd_table_s *fdt, int minFd)
|
||||||
{
|
{
|
||||||
if (fdt == NULL) {
|
|
||||||
return VFS_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (minFd >= fdt->max_fds) {
|
if (minFd >= fdt->max_fds) {
|
||||||
set_errno(EINVAL);
|
set_errno(EINVAL);
|
||||||
return VFS_ERROR;
|
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);
|
ret = strncpy_s(pc->name, len + 1, name, len);
|
||||||
if (ret != LOS_OK) {
|
if (ret != LOS_OK) {
|
||||||
|
free(pc);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -450,8 +450,16 @@ OUT:
|
||||||
int SysSymlink(const char *target, const char *linkpath)
|
int SysSymlink(const char *target, const char *linkpath)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
char *targetRet = NULL;
|
||||||
char *pathRet = NULL;
|
char *pathRet = NULL;
|
||||||
|
|
||||||
|
if (target != NULL) {
|
||||||
|
ret = UserPathCopy(target, &targetRet);
|
||||||
|
if (ret != 0) {
|
||||||
|
goto OUT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (linkpath != NULL) {
|
if (linkpath != NULL) {
|
||||||
ret = UserPathCopy(linkpath, &pathRet);
|
ret = UserPathCopy(linkpath, &pathRet);
|
||||||
if (ret != 0) {
|
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) {
|
if (ret < 0) {
|
||||||
ret = -get_errno();
|
ret = -get_errno();
|
||||||
}
|
}
|
||||||
|
@ -468,6 +476,10 @@ OUT:
|
||||||
if (pathRet != NULL) {
|
if (pathRet != NULL) {
|
||||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, pathRet);
|
(void)LOS_MemFree(OS_SYS_MEM_ADDR, pathRet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (targetRet != NULL) {
|
||||||
|
(void)LOS_MemFree(OS_SYS_MEM_ADDR, targetRet);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,6 +618,7 @@ int SysMount(const char *source, const char *target, const char *filesystemtype,
|
||||||
int ret;
|
int ret;
|
||||||
char *sourceRet = NULL;
|
char *sourceRet = NULL;
|
||||||
char *targetRet = NULL;
|
char *targetRet = NULL;
|
||||||
|
char *dataRet = NULL;
|
||||||
char fstypeRet[FILESYSTEM_TYPE_MAX + 1] = {0};
|
char fstypeRet[FILESYSTEM_TYPE_MAX + 1] = {0};
|
||||||
|
|
||||||
if (!IsCapPermit(CAP_FS_MOUNT)) {
|
if (!IsCapPermit(CAP_FS_MOUNT)) {
|
||||||
|
@ -642,7 +655,14 @@ int SysMount(const char *source, const char *target, const char *filesystemtype,
|
||||||
#endif
|
#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) {
|
if (ret < 0) {
|
||||||
ret = -get_errno();
|
ret = -get_errno();
|
||||||
}
|
}
|
||||||
|
@ -654,6 +674,9 @@ OUT:
|
||||||
if (targetRet != NULL) {
|
if (targetRet != NULL) {
|
||||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, targetRet);
|
(void)LOS_MemFree(OS_SYS_MEM_ADDR, targetRet);
|
||||||
}
|
}
|
||||||
|
if (dataRet != NULL) {
|
||||||
|
(void)LOS_MemFree(OS_SYS_MEM_ADDR, dataRet);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1327,9 +1350,12 @@ ssize_t SysReadv(int fd, const struct iovec *iov, int iovcnt)
|
||||||
|
|
||||||
/* Process fd convert to system global fd */
|
/* Process fd convert to system global fd */
|
||||||
fd = GetAssociatedSystemFd(fd);
|
fd = GetAssociatedSystemFd(fd);
|
||||||
if ((iov == NULL) || (iovcnt <= 0) || (iovcnt > IOV_MAX)) {
|
if ((iov == NULL) || (iovcnt < 0) || (iovcnt > IOV_MAX)) {
|
||||||
ret = vfs_readv(fd, iov, iovcnt, NULL);
|
return -EINVAL;
|
||||||
return -get_errno();
|
}
|
||||||
|
|
||||||
|
if (iovcnt == 0) {
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = UserIovCopy(&iovRet, iov, iovcnt, &valid_iovcnt);
|
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)) {
|
if ((iovcnt < 0) || (iovcnt > IOV_MAX)) {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (iovcnt == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (iov == NULL) {
|
if (iov == NULL) {
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
@ -1545,21 +1576,26 @@ char *SysGetcwd(char *buf, size_t n)
|
||||||
{
|
{
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
char *bufRet = NULL;
|
char *bufRet = NULL;
|
||||||
|
size_t bufLen = n;
|
||||||
int retVal;
|
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) {
|
if (bufRet == NULL) {
|
||||||
return (char *)(intptr_t)-ENOMEM;
|
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) {
|
if (ret == NULL) {
|
||||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, bufRet);
|
(void)LOS_MemFree(OS_SYS_MEM_ADDR, bufRet);
|
||||||
return (char *)(intptr_t)-get_errno();
|
return (char *)(intptr_t)-get_errno();
|
||||||
}
|
}
|
||||||
|
|
||||||
retVal = LOS_ArchCopyToUser(buf, bufRet, n);
|
retVal = LOS_ArchCopyToUser(buf, bufRet, bufLen);
|
||||||
if (retVal != 0) {
|
if (retVal != 0) {
|
||||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, bufRet);
|
(void)LOS_MemFree(OS_SYS_MEM_ADDR, bufRet);
|
||||||
return (char *)(intptr_t)-EFAULT;
|
return (char *)(intptr_t)-EFAULT;
|
||||||
|
@ -1749,6 +1785,14 @@ int SysSymlinkat(const char *target, int dirfd, const char *linkpath)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
char *pathRet = NULL;
|
char *pathRet = NULL;
|
||||||
|
char *targetRet = NULL;
|
||||||
|
|
||||||
|
if (target != NULL) {
|
||||||
|
ret = UserPathCopy(target, &targetRet);
|
||||||
|
if (ret != 0) {
|
||||||
|
goto OUT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (linkpath != NULL) {
|
if (linkpath != NULL) {
|
||||||
ret = UserPathCopy(linkpath, &pathRet);
|
ret = UserPathCopy(linkpath, &pathRet);
|
||||||
|
@ -1762,7 +1806,7 @@ int SysSymlinkat(const char *target, int dirfd, const char *linkpath)
|
||||||
dirfd = GetAssociatedSystemFd(dirfd);
|
dirfd = GetAssociatedSystemFd(dirfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = symlinkat(target, dirfd, pathRet);
|
ret = symlinkat(targetRet, dirfd, pathRet);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ret = -get_errno();
|
ret = -get_errno();
|
||||||
}
|
}
|
||||||
|
@ -1771,6 +1815,10 @@ OUT:
|
||||||
if (pathRet != NULL) {
|
if (pathRet != NULL) {
|
||||||
(void)LOS_MemFree(OS_SYS_MEM_ADDR, pathRet);
|
(void)LOS_MemFree(OS_SYS_MEM_ADDR, pathRet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (targetRet != NULL) {
|
||||||
|
(void)LOS_MemFree(OS_SYS_MEM_ADDR, targetRet);
|
||||||
|
}
|
||||||
return ret;
|
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 */
|
/* Process fd convert to system global fd */
|
||||||
fd = GetAssociatedSystemFd(fd);
|
fd = GetAssociatedSystemFd(fd);
|
||||||
if ((iov == NULL) || (iovcnt <= 0) || (iovcnt > IOV_MAX)) {
|
if ((iov == NULL) || (iovcnt < 0) || (iovcnt > IOV_MAX)) {
|
||||||
ret = preadv(fd, iov, iovcnt, offsetflag);
|
return -EINVAL;
|
||||||
return -get_errno();
|
}
|
||||||
|
|
||||||
|
if (iovcnt == 0) {
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = UserIovCopy(&iovRet, iov, iovcnt, &valid_iovcnt);
|
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 */
|
/* Process fd convert to system global fd */
|
||||||
fd = GetAssociatedSystemFd(fd);
|
fd = GetAssociatedSystemFd(fd);
|
||||||
if ((iov == NULL) || (iovcnt <= 0) || (iovcnt > IOV_MAX)) {
|
if ((iov == NULL) || (iovcnt < 0) || (iovcnt > IOV_MAX)) {
|
||||||
ret = pwritev(fd, iov, iovcnt, offsetflag);
|
return -EINVAL;
|
||||||
return -get_errno();
|
}
|
||||||
|
|
||||||
|
if (iovcnt == 0) {
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = UserIovCopy(&iovRet, iov, iovcnt, &valid_iovcnt);
|
ret = UserIovCopy(&iovRet, iov, iovcnt, &valid_iovcnt);
|
||||||
|
|
Loading…
Reference in New Issue