diff options
| author | Joanne Koong <joannelkoong@gmail.com> | 2026-06-03 18:18:58 -0700 |
|---|---|---|
| committer | Christian Brauner <brauner@kernel.org> | 2026-06-04 10:02:56 +0200 |
| commit | 2eea7f44b9c8b42fd7d3a1a87c06a7cd1b99c327 (patch) | |
| tree | a4b5983d6d425668295f63207540d2c590b26a7a /scripts/objdump-func | |
| parent | 40ab6644b99685755f740b872c00ef40d9aa870e (diff) | |
| download | lwn-2eea7f44b9c8b42fd7d3a1a87c06a7cd1b99c327.tar.gz lwn-2eea7f44b9c8b42fd7d3a1a87c06a7cd1b99c327.zip | |
iomap: avoid potential null folio->mapping deref during error reporting
When a buffered read fails, iomap_finish_folio_read() reports the error
with fserror_report_io(folio->mapping->host, ...). This is called after
ifs->read_bytes_pending has been decremented by the bytes attempted to
be read.
For a folio split across multiple read completions, the folio is only
guaranteed to stay locked while read_bytes_pending > 0. Once
iomap_finish_folio_read() decrements read_bytes_pending, another
in-flight read can complete and end the read on the folio, which unlocks
it. This allows truncate logic to run and detach the folio (set
folio->mapping to NULL). The error reporting path then can dereference a
NULL folio->mapping. As reported by Sam Sun, this is the race that can
occur:
CPU0: failed completion CPU1: final completion CPU2: truncate
----------------------- ---------------------- --------------
read_bytes_pending -= len
finished = false
/* preempted before
fserror_report_io() */
read_bytes_pending -= len
finished = true
folio_end_read()
truncate clears
folio->mapping
fserror_report_io(
folio->mapping->host, ...)
^ NULL deref
Fix this by reporting the error first before decrementing
ifs->read_bytes_pending.
Fixes: a9d573ee88af ("iomap: report file I/O errors to the VFS")
Cc: stable@vger.kernel.org
Reported-by: Sam Sun <samsun1006219@gmail.com>
Closes: https://lore.kernel.org/linux-fsdevel/CAEkJfYPhWdd59RKmuNLJg-bkypHz7xiOwaWyNVu3A8CUqQCnvg@mail.gmail.com/
Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
Link: https://patch.msgid.link/20260604011858.2297561-1-joannelkoong@gmail.com
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
Diffstat (limited to 'scripts/objdump-func')
0 files changed, 0 insertions, 0 deletions
