summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorzms123456 <[email protected]>2024-08-23 05:52:19 +0800
committerGitHub <[email protected]>2024-08-22 17:52:19 -0400
commitfd31965c3c7a39a2e06405d549aa27ab38ee8c56 (patch)
tree768fc468497d96ced1b47414a368484aaefc0590 /components
parentd3b9480658b79800b78b6281af473d2f4933cef2 (diff)
[components][lwp]fix mount param issue (#9333)
fix mount param issue
Diffstat (limited to 'components')
-rw-r--r--components/lwp/lwp_syscall.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c
index 21a34bd28e..e50e195c46 100644
--- a/components/lwp/lwp_syscall.c
+++ b/components/lwp/lwp_syscall.c
@@ -5784,13 +5784,30 @@ sysret_t sys_mount(char *source, char *target,
{
copy_source = NULL;
}
- ret = dfs_mount(copy_source, copy_target, copy_filesystemtype, 0, tmp);
- if (ret < 0)
+ struct stat buf;
+
+ if (copy_source && stat(copy_source, &buf) && S_ISBLK(buf.st_mode))
{
- ret = -rt_get_errno();
+ char *dev_fullpath = dfs_normalize_path(RT_NULL, copy_source);
+ rt_free(copy_source);
+ RT_ASSERT(rt_strncmp(dev_fullpath, "/dev/", sizeof("/dev/") - 1) == 0);
+ ret = dfs_mount(dev_fullpath + sizeof("/dev/") - 1, copy_target, copy_filesystemtype, 0, tmp);
+ if (ret < 0)
+ {
+ ret = -rt_get_errno();
+ }
+ rt_free(dev_fullpath);
+ }
+ else
+ {
+ ret = dfs_mount(copy_source, copy_target, copy_filesystemtype, 0, tmp);
+ if (ret < 0)
+ {
+ ret = -rt_get_errno();
+ }
+ rt_free(copy_source);
}
- rt_free(copy_source);
return ret;
}