[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250831123602.14037-14-pali@kernel.org>
Date: Sun, 31 Aug 2025 14:35:40 +0200
From: Pali Rohár <pali@...nel.org>
To: Steve French <sfrench@...ba.org>,
Paulo Alcantara <pc@...guebit.com>,
ronnie sahlberg <ronniesahlberg@...il.com>
Cc: linux-cifs@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [PATCH 13/35] cifs: Avoid dynamic memory allocation of FILE_BASIC_INFO buffer in cifs_rename_pending_delete()
Put FILE_BASIC_INFO buffer on the stack as it is not too large.
This simplify error handling in cifs_rename_pending_delete().
Signed-off-by: Pali Rohár <pali@...nel.org>
---
fs/smb/client/inode.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c
index 88d1d657cfb0..2889fa6625af 100644
--- a/fs/smb/client/inode.c
+++ b/fs/smb/client/inode.c
@@ -1711,7 +1711,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
struct tcon_link *tlink;
struct cifs_tcon *tcon;
__u32 dosattr, origattr;
- FILE_BASIC_INFO *info_buf = NULL;
+ FILE_BASIC_INFO info_buf = {};
unsigned char sillyname[SILLYNAME_LEN + 1];
int sillyname_len;
@@ -1780,13 +1780,8 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
/* set ATTR_HIDDEN and clear ATTR_READONLY, but only if needed */
if (dosattr != origattr) {
- info_buf = kzalloc(sizeof(*info_buf), GFP_KERNEL);
- if (info_buf == NULL) {
- rc = -ENOMEM;
- goto out_close;
- }
- info_buf->Attributes = cpu_to_le32(dosattr);
- rc = CIFSSMBSetFileInfo(xid, tcon, info_buf, fid.netfid,
+ info_buf.Attributes = cpu_to_le32(dosattr);
+ rc = CIFSSMBSetFileInfo(xid, tcon, &info_buf, fid.netfid,
current->tgid);
/* although we would like to mark the file hidden
if that fails we will still try to rename it */
@@ -1829,7 +1824,6 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
out_close:
CIFSSMBClose(xid, tcon, fid.netfid);
out:
- kfree(info_buf);
cifs_put_tlink(tlink);
return rc;
@@ -1843,8 +1837,8 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
cifs_sb->local_nls, cifs_remap(cifs_sb));
undo_setattr:
if (dosattr != origattr) {
- info_buf->Attributes = cpu_to_le32(origattr);
- if (!CIFSSMBSetFileInfo(xid, tcon, info_buf, fid.netfid,
+ info_buf.Attributes = cpu_to_le32(origattr);
+ if (!CIFSSMBSetFileInfo(xid, tcon, &info_buf, fid.netfid,
current->tgid))
cifsInode->cifsAttrs = origattr;
}
--
2.20.1
Powered by blists - more mailing lists