diff options
| author | angryproton <[email protected]> | 2026-08-04 23:12:09 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2026-08-06 11:18:51 +0800 |
| commit | 2f7a2299f61b59d5cf00426dac0d248dce9beb4c (patch) | |
| tree | be1dd91b03d2058fa439e9ea250a756fc56c3f64 /components | |
| parent | 395dff4e2e9c2a3c33cdac24249b20a94ecd9d14 (diff) | |
[fix][dfs] 增加文件系统操作的类型检查,防止类型不匹配导致数据结构不一致引发的异常
Diffstat (limited to 'components')
| -rw-r--r-- | components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c | 5 | ||||
| -rw-r--r-- | components/dfs/dfs_v1/src/dfs_posix.c | 5 | ||||
| -rw-r--r-- | components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c | 5 | ||||
| -rw-r--r-- | components/dfs/dfs_v2/src/dfs_file.c | 6 | ||||
| -rw-r--r-- | components/dfs/dfs_v2/src/dfs_posix.c | 5 |
5 files changed, 26 insertions, 0 deletions
diff --git a/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c b/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c index ceaccc44b0..86963d6e48 100644 --- a/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c @@ -588,6 +588,11 @@ int dfs_elm_flush(struct dfs_file *file) FIL *fd; FRESULT result; + if (file->vnode->type == FT_DIRECTORY) + { + return -EISDIR; + } + fd = (FIL *)(file->data); RT_ASSERT(fd != RT_NULL); diff --git a/components/dfs/dfs_v1/src/dfs_posix.c b/components/dfs/dfs_v1/src/dfs_posix.c index f3d7b70c31..9e11307709 100644 --- a/components/dfs/dfs_v1/src/dfs_posix.c +++ b/components/dfs/dfs_v1/src/dfs_posix.c @@ -460,6 +460,11 @@ int fsync(int fildes) } ret = dfs_file_flush(d); + if (ret < 0) + { + rt_set_errno(ret); + return -1; + } return ret; } diff --git a/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c b/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c index eab787cde4..71dc417205 100644 --- a/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c @@ -623,6 +623,11 @@ int dfs_elm_flush(struct dfs_file *file) FIL *fd; FRESULT result; + if (file->vnode->type == FT_DIRECTORY) + { + return -EISDIR; + } + fd = (FIL *)(file->vnode->data); RT_ASSERT(fd != RT_NULL); diff --git a/components/dfs/dfs_v2/src/dfs_file.c b/components/dfs/dfs_v2/src/dfs_file.c index 9c6e383e1b..32a18dab3d 100644 --- a/components/dfs/dfs_v2/src/dfs_file.c +++ b/components/dfs/dfs_v2/src/dfs_file.c @@ -2202,6 +2202,7 @@ int dfs_file_rename(const char *old_file, const char *new_file) * @return int Operation result: * - 0 on success * -EBADF if invalid file descriptor + * -EISDIR if the file is a directory (directories cannot be truncated) * -ENOSYS if truncate operation not supported * -EINVAL if invalid parameters or not mounted * @@ -2214,6 +2215,11 @@ int dfs_file_ftruncate(struct dfs_file *file, off_t length) if (file) { + if (file->vnode->type == FT_DIRECTORY) + { + return -EISDIR; + } + if (file->fops->truncate) { if (dfs_is_mounted(file->vnode->mnt) == 0) diff --git a/components/dfs/dfs_v2/src/dfs_posix.c b/components/dfs/dfs_v2/src/dfs_posix.c index d0eff53a46..f774aee341 100644 --- a/components/dfs/dfs_v2/src/dfs_posix.c +++ b/components/dfs/dfs_v2/src/dfs_posix.c @@ -605,6 +605,11 @@ int fsync(int fildes) } ret = dfs_file_fsync(file); + if (ret < 0) + { + rt_set_errno(ret); + return -1; + } return ret; } |
