diff options
| author | Dominik Maier <dmnk@google.com> | 2026-10-23 01:21:16 +0200 |
|---|---|---|
| committer | Paulo Alcantara <pc@manguebit.org> | 2026-10-25 15:04:29 -0300 |
| commit | a377a3645c7d0246af0bc4ef24db94bb2670bdde (patch) | |
| tree | 634acaa6efced09b9b6f6eab10cd6aaf2bcfd31c /tools/perf/scripts/python | |
| parent | 482c117c6dbeee382790168af10959810450ab09 (diff) | |
| download | linux-a377a3645c7d0246af0bc4ef24db94bb2670bdde.tar.gz linux-a377a3645c7d0246af0bc4ef24db94bb2670bdde.zip | |
smb: client: fix slab-out-of-bounds write in id_mode_to_cifs_acl()
In id_mode_to_cifs_acl(), while the chown branch reserves
sizeof(struct smb_ntsd) + 2 * sizeof(struct smb_sid) (plus
sizeof(struct smb_acl) and the worst-case ACE space after
commit 0ee150794c75 ("smb: client: fix heap overflow in DACL owner/group
rewrite")), the chmod branch only adds 2 * sizeof(struct smb_ace) or
5 * sizeof(struct smb_ace) to secdesclen (or 1 * sizeof(struct smb_ace)
on posix).
However, the chmod branch also invokes build_sec_desc() ->
copy_sec_desc(), which unconditionally writes the Owner SID at
pnntsd + sidsoffset and the Group SID at
pnntsd + sidsoffset + sizeof(struct smb_sid) (2 * 68 = 136 bytes total),
and set_chmod_dacl() always writes a struct smb_acl header (8 bytes)
even when the source descriptor has dacloffset == 0. When a security
descriptor has compact or overlapping Owner/Group SIDs (or
dacloffset == 0), calling chmod() under-allocates pnntsd and writes past
the end of the slab buffer.
Reserve sizeof(struct smb_acl) + 2 * sizeof(struct smb_sid) (plus
sizeof(struct smb_ntsd) on the posix path) in the chmod branch of
id_mode_to_cifs_acl().
Fixes: 7ee0b4c635c0 ("cifs: fix hardcoded default security descriptor length")
Fixes: f5065508897a ("cifs: Retain old ACEs when converting between mode bits and ACL.")
Assisted-by: ARTIST LLM
Signed-off-by: Dominik Maier <dmnk@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Paulo Alcantara <pc@manguebit.org>
Diffstat (limited to 'tools/perf/scripts/python')
0 files changed, 0 insertions, 0 deletions
