diff options
| author | Abdifatah Suruur <suruurism@gmail.com> | 2026-10-23 14:52:46 +0300 |
|---|---|---|
| committer | Paulo Alcantara <pc@manguebit.org> | 2026-10-23 12:26:03 -0300 |
| commit | f5baa17a0f316c235d61623ac8e8fb32c2b3c0cc (patch) | |
| tree | 9ad6e91f0c9cac99b1f97c3b2faccb0e53226d25 /tools/perf/scripts/python/stackcollapse.py | |
| parent | 2ec9cdf469dd32bcf33073aeb30c08e9356e0ca1 (diff) | |
| download | linux-f5baa17a0f316c235d61623ac8e8fb32c2b3c0cc.tar.gz linux-f5baa17a0f316c235d61623ac8e8fb32c2b3c0cc.zip | |
smb: client: fix fiemap wild read on empty truncated response
smb3_fiemap() treats -E2BIG from SMB2_ioctl() as a truncated range blob
and loops for the next chunk. If the server reports
STATUS_BUFFER_OVERFLOW with OutputCount == 0, SMB2_ioctl() returns
-E2BIG with out_data == NULL and out_data_len == 0, and the existing
length checks accept the empty result. The loop then evaluates
next = out_data[num - 1].file_offset + ...
with num == 0, reading 16 bytes before NULL.
Reject a truncated range blob that contains no range, so the resume
offset is never computed from an empty response. Also require the last
range in a truncated blob to advance the resume offset without
overflowing, and to stay within the requested range; a malicious or
broken server could otherwise make no progress or underflow len and loop
forever. Free the previous response buffer before retrying.
Reproduced on 6.6.87.2 with a malicious SMB2 server that answers
FSCTL_QUERY_ALLOCATED_RANGES with STATUS_BUFFER_OVERFLOW and
OutputCount == 0; an FS_IOC_FIEMAP ioctl on the mount oopses in
cifs_fiemap() with CR2 = fffffffffffffff8. The code path is unchanged
on mainline.
Fixes: 2f3ebaba13ce ("cifs: add fiemap support")
Cc: stable@vger.kernel.org
Signed-off-by: Abdifatah Suruur <suruurism@gmail.com>
Signed-off-by: Paulo Alcantara <pc@manguebit.org>
Diffstat (limited to 'tools/perf/scripts/python/stackcollapse.py')
0 files changed, 0 insertions, 0 deletions
