]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
smb/client: use stack-allocated smb2_file_all_info in smb3_query_mf_symlink()
authorChenXiaoSong <chenxiaosong@kylinos.cn>
Thu, 9 Jul 2026 02:57:00 +0000 (10:57 +0800)
committerSteve French <stfrench@microsoft.com>
Thu, 9 Jul 2026 12:55:55 +0000 (07:55 -0500)
SMB2_open() only fills the fixed fields, so a stack-allocated
smb2_file_all_info is sufficient here.

Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/link.c

index dd127917a34053e2ce86a443e842c65e37d6289c..0014523d6511f1a61fa4c6caf90584ef27a035bd 100644 (file)
@@ -320,7 +320,7 @@ smb3_query_mf_symlink(unsigned int xid, struct cifs_tcon *tcon,
        int buf_type = CIFS_NO_BUFFER;
        __le16 *utf16_path;
        __u8 oplock = SMB2_OPLOCK_LEVEL_NONE;
-       struct smb2_file_all_info *pfile_info = NULL;
+       struct smb2_file_all_info file_info = {};
 
        oparms = (struct cifs_open_parms) {
                .tcon = tcon,
@@ -336,20 +336,12 @@ smb3_query_mf_symlink(unsigned int xid, struct cifs_tcon *tcon,
        if (utf16_path == NULL)
                return -ENOMEM;
 
-       pfile_info = kzalloc(sizeof(struct smb2_file_all_info) + PATH_MAX * 2,
-                            GFP_KERNEL);
-
-       if (pfile_info == NULL) {
-               kfree(utf16_path);
-               return  -ENOMEM;
-       }
-
-       rc = SMB2_open(xid, &oparms, utf16_path, &oplock, pfile_info, NULL,
+       rc = SMB2_open(xid, &oparms, utf16_path, &oplock, &file_info, NULL,
                       NULL, NULL);
        if (rc)
                goto qmf_out_open_fail;
 
-       if (pfile_info->EndOfFile != cpu_to_le64(CIFS_MF_SYMLINK_FILE_SIZE)) {
+       if (file_info.EndOfFile != cpu_to_le64(CIFS_MF_SYMLINK_FILE_SIZE)) {
                /* it's not a symlink */
                rc = -ENOENT; /* Is there a better rc to return? */
                goto qmf_out;
@@ -367,7 +359,6 @@ qmf_out:
        SMB2_close(xid, tcon, fid.persistent_fid, fid.volatile_fid);
 qmf_out_open_fail:
        kfree(utf16_path);
-       kfree(pfile_info);
        return rc;
 }