diff mbox series

smb: client: report correct st_size for SMB and NFS symlinks

Message ID 20231128193719.11919-1-pc@manguebit.com (mailing list archive)
State New, archived
Headers show
Series smb: client: report correct st_size for SMB and NFS symlinks | expand

Commit Message

Paulo Alcantara Nov. 28, 2023, 7:37 p.m. UTC
We can't rely on FILE_STANDARD_INFORMATION::EndOfFile for reparse
points as they will be always zero.  Set it to symlink target's length
as specified by POSIX.

This will make stat() family of syscalls return the correct st_size
for such files.

Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
---
 fs/smb/client/inode.c | 2 ++
 1 file changed, 2 insertions(+)
diff mbox series

Patch

diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c
index 01c7d2973d66..0b05e664008e 100644
--- a/fs/smb/client/inode.c
+++ b/fs/smb/client/inode.c
@@ -866,6 +866,8 @@  static void cifs_open_info_to_fattr(struct cifs_fattr *fattr,
 
 out_reparse:
 	if (S_ISLNK(fattr->cf_mode)) {
+		if (likely(data->symlink_target))
+			fattr->cf_eof = strnlen(data->symlink_target, PATH_MAX);
 		fattr->cf_symlink_target = data->symlink_target;
 		data->symlink_target = NULL;
 	}