From 56f605a0cd6ac462a49788325164903822f13add Mon Sep 17 00:00:00 2001 From: zhangyan Date: Wed, 25 May 2022 07:52:52 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B0=86toybox=20ls=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8C=91=E5=8D=95=E5=88=B03.0=20LTS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 错误场景: OHOS: mount -t nfs 192.168.1.1:/nfs nfs (cwd: /) OHOS: ls /nfs (成功) OHOS: ls nfs (成功) OHOS: cd nfs OHOS: ls (失败) 错误路径: 1. 以相对路径mount任意文件系统 2. open挂载点获得文件描述符fd 3. 通过fstat接口获取挂载点属性则会发生错误 错误根因: 1. 内核mount接口直接将入参target(挂载点)拷贝到Vnode的filePath字段,如果target为相对路径,则filePath为相对路径; 2. 打开挂载点时,Vnode的filePath直接赋值给文件接口提file的f_path字段; 3. 通过fstat接口查询挂载点属性,内核会调用get_path_from_fd接口获取file的f_path,再调用stat接口查询属性; 4. 由于此时f_path为相对路径,如果fstat时,进程的cwd与挂载时不一致,则导致查找目录失败。 re #I55W66 Signed-off-by: Kiita Change-Id: I51a2b1e5a38702555adec5bd345e27f2d3eb74e4 --- fs/mount/fs_mount.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/mount/fs_mount.c b/fs/mount/fs_mount.c index 225a77c..1b5ab6e 100755 --- a/fs/mount/fs_mount.c +++ b/fs/mount/fs_mount.c @@ -296,7 +296,7 @@ int mount(const char *source, const char *target, } mnt->vnodeBeCovered->flag |= VNODE_FLAG_MOUNT_ORIGIN; mnt->vnodeCovered->flag |= VNODE_FLAG_MOUNT_NEW; - mnt->vnodeCovered->filePath = strdup(target); + mnt->vnodeCovered->filePath = strdup(mountpt_vnode->filePath); mnt->vnodeDev = device; mnt->ops = mops; if (target && (strlen(target) != 0)) -- GitLab