Skip to content

Commit 2f7a229

Browse files
Unbear-HzRbb666
authored andcommitted
[fix][dfs] 增加文件系统操作的类型检查,防止类型不匹配导致数据结构不一致引发的异常
1 parent 395dff4 commit 2f7a229

5 files changed

Lines changed: 26 additions & 0 deletions

File tree

components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,11 @@ int dfs_elm_flush(struct dfs_file *file)
588588
FIL *fd;
589589
FRESULT result;
590590

591+
if (file->vnode->type == FT_DIRECTORY)
592+
{
593+
return -EISDIR;
594+
}
595+
591596
fd = (FIL *)(file->data);
592597
RT_ASSERT(fd != RT_NULL);
593598

components/dfs/dfs_v1/src/dfs_posix.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,11 @@ int fsync(int fildes)
460460
}
461461

462462
ret = dfs_file_flush(d);
463+
if (ret < 0)
464+
{
465+
rt_set_errno(ret);
466+
return -1;
467+
}
463468

464469
return ret;
465470
}

components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,11 @@ int dfs_elm_flush(struct dfs_file *file)
623623
FIL *fd;
624624
FRESULT result;
625625

626+
if (file->vnode->type == FT_DIRECTORY)
627+
{
628+
return -EISDIR;
629+
}
630+
626631
fd = (FIL *)(file->vnode->data);
627632
RT_ASSERT(fd != RT_NULL);
628633

components/dfs/dfs_v2/src/dfs_file.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2202,6 +2202,7 @@ int dfs_file_rename(const char *old_file, const char *new_file)
22022202
* @return int Operation result:
22032203
* - 0 on success
22042204
* -EBADF if invalid file descriptor
2205+
* -EISDIR if the file is a directory (directories cannot be truncated)
22052206
* -ENOSYS if truncate operation not supported
22062207
* -EINVAL if invalid parameters or not mounted
22072208
*
@@ -2214,6 +2215,11 @@ int dfs_file_ftruncate(struct dfs_file *file, off_t length)
22142215

22152216
if (file)
22162217
{
2218+
if (file->vnode->type == FT_DIRECTORY)
2219+
{
2220+
return -EISDIR;
2221+
}
2222+
22172223
if (file->fops->truncate)
22182224
{
22192225
if (dfs_is_mounted(file->vnode->mnt) == 0)

components/dfs/dfs_v2/src/dfs_posix.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,11 @@ int fsync(int fildes)
605605
}
606606

607607
ret = dfs_file_fsync(file);
608+
if (ret < 0)
609+
{
610+
rt_set_errno(ret);
611+
return -1;
612+
}
608613

609614
return ret;
610615
}

0 commit comments

Comments
 (0)