projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
09162bc
)
cifs: fix a memleak with modefromsid
author
Namjae Jeon
<namjae.jeon@samsung.com>
Mon, 9 Nov 2020 08:35:33 +0000
(17:35 +0900)
committer
Steve French
<stfrench@microsoft.com>
Mon, 16 Nov 2020 05:05:33 +0000
(23:05 -0600)
kmemleak reported a memory leak allocated in query_info() when cifs is
working with modefromsid.
backtrace:
[<
00000000aeef6a1e
>] slab_post_alloc_hook+0x58/0x510
[<
00000000b2f7a440
>] __kmalloc+0x1a0/0x390
[<
000000006d470ebc
>] query_info+0x5b5/0x700 [cifs]
[<
00000000bad76ce0
>] SMB2_query_acl+0x2b/0x30 [cifs]
[<
000000001fa09606
>] get_smb2_acl_by_path+0x2f3/0x720 [cifs]
[<
000000001b6ebab7
>] get_smb2_acl+0x75/0x90 [cifs]
[<
00000000abf43904
>] cifs_acl_to_fattr+0x13b/0x1d0 [cifs]
[<
00000000a5372ec3
>] cifs_get_inode_info+0x4cd/0x9a0 [cifs]
[<
00000000388e0a04
>] cifs_revalidate_dentry_attr+0x1cd/0x510 [cifs]
[<
0000000046b6b352
>] cifs_getattr+0x8a/0x260 [cifs]
[<
000000007692c95e
>] vfs_getattr_nosec+0xa1/0xc0
[<
00000000cbc7d742
>] vfs_getattr+0x36/0x40
[<
00000000de8acf67
>] vfs_statx_fd+0x4a/0x80
[<
00000000a58c6adb
>] __do_sys_newfstat+0x31/0x70
[<
00000000300b3b4e
>] __x64_sys_newfstat+0x16/0x20
[<
000000006d8e9c48
>] do_syscall_64+0x37/0x80
This patch add missing kfree for pntsd when mounting modefromsid option.
Cc: Stable <stable@vger.kernel.org> # v5.4+
Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifsacl.c
patch
|
blob
|
history
diff --git
a/fs/cifs/cifsacl.c
b/fs/cifs/cifsacl.c
index
23b21e9
..
ef4784e
100644
(file)
--- a/
fs/cifs/cifsacl.c
+++ b/
fs/cifs/cifsacl.c
@@
-1266,6
+1266,7
@@
cifs_acl_to_fattr(struct cifs_sb_info *cifs_sb, struct cifs_fattr *fattr,
cifs_dbg(VFS, "%s: error %d getting sec desc\n", __func__, rc);
} else if (mode_from_special_sid) {
rc = parse_sec_desc(cifs_sb, pntsd, acllen, fattr, true);
+ kfree(pntsd);
} else {
/* get approximated mode from ACL */
rc = parse_sec_desc(cifs_sb, pntsd, acllen, fattr, false);