diff options
author | Sungjong Seo <sj1557.seo@samsung.com> | 2025-03-21 09:34:42 +0300 |
---|---|---|
committer | Namjae Jeon <linkinjeon@kernel.org> | 2025-03-27 15:18:02 +0300 |
commit | 1bb7ff4204b6d4927e982cd256286c09ed4fd8ca (patch) | |
tree | db208a3ca298bafead386082889192a3b2a5552e /tools/perf/scripts/python/arm-cs-trace-disasm.py | |
parent | f6369ae1f088cb6d18d7a07eec95d7c10c2a2a5e (diff) | |
download | linux-1bb7ff4204b6d4927e982cd256286c09ed4fd8ca.tar.xz |
exfat: fix random stack corruption after get_block
When get_block is called with a buffer_head allocated on the stack, such
as do_mpage_readpage, stack corruption due to buffer_head UAF may occur in
the following race condition situation.
<CPU 0> <CPU 1>
mpage_read_folio
<<bh on stack>>
do_mpage_readpage
exfat_get_block
bh_read
__bh_read
get_bh(bh)
submit_bh
wait_on_buffer
...
end_buffer_read_sync
__end_buffer_read_notouch
unlock_buffer
<<keep going>>
...
...
...
...
<<bh is not valid out of mpage_read_folio>>
.
.
another_function
<<variable A on stack>>
put_bh(bh)
atomic_dec(bh->b_count)
* stack corruption here *
This patch returns -EAGAIN if a folio does not have buffers when bh_read
needs to be called. By doing this, the caller can fallback to functions
like block_read_full_folio(), create a buffer_head in the folio, and then
call get_block again.
Let's do not call bh_read() with on-stack buffer_head.
Fixes: 11a347fb6cef ("exfat: change to get file size from DataLength")
Cc: stable@vger.kernel.org
Tested-by: Yeongjin Gil <youngjin.gil@samsung.com>
Signed-off-by: Sungjong Seo <sj1557.seo@samsung.com>
Reviewed-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Diffstat (limited to 'tools/perf/scripts/python/arm-cs-trace-disasm.py')
0 files changed, 0 insertions, 0 deletions