summaryrefslogtreecommitdiff
path: root/tools/lib/python
diff options
context:
space:
mode:
authorJosef Bacik <josef@toxicpanda.com>2026-10-31 10:39:35 +0100
committerDavid Hildenbrand (Arm) <david@kernel.org>2026-11-02 11:21:29 +0100
commitdc24e273244e9d712257d5a6c20a32c7f5ca84e6 (patch)
tree743d579a043fcc52f3ea47575278fe91dcc3ce6a /tools/lib/python
parent9cf632e139737314afa889ca18122bc3fddb9120 (diff)
mm/filemap: read mapping->a_ops->free_folio under i_lock
memory_failure() -> ... -> filemap_remove_folio() can read mapping->a_ops after the inode has been freed. Once the folio is deleted from the pagecache it no longer pins the mapping, so after i_lock is dropped e.g., a concurrent final iput() can evict and free the inode before filemap_free_folio() looks up mapping->a_ops->free_folio. Most callers hold a reference on the inode, but not all. Documentation/filesystems/vfs.rst explicitly states that ->free_folio() must not assume the original address_space mapping still exists. Fix it by loading ->free_folio while i_lock is still held, similar to what folio_unmap_invalidate() does. Inline filemap_free_folio() into its remaining caller such that delete_from_page_cache_batch() also just loads the callback before dropping the i_lock. The bug was found by code inspection and has not been reproduced. Fix generated by an LLM and sent by Josef Bacik in private. Fixes: 59c66c5f8c4f ("mm: factor out page cache page freeing into a separate function") Cc: stable@vger.kernel.org Signed-off-by: Josef Bacik <josef@toxicpanda.com> [ david: get rid of filemap_free_folio() entirely; improve patch description ] Reviewed-by: Rik van Riel <riel@surriel.com> Tested-by: Muhammad Usama Anjum <usama.anjum@arm.com> Reviewed-by: Zi Yan <ziy@nvidia.com> Link: https://patch.msgid.link/20261031-fixes_core-v3-6-d6437171ecc3@kernel.org Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Diffstat (limited to 'tools/lib/python')
0 files changed, 0 insertions, 0 deletions