diff options
| author | David Wang <[email protected]> | 2025-05-05 19:30:34 +0000 |
|---|---|---|
| committer | Andrew Morton <[email protected]> | 2025-05-12 00:26:06 +0000 |
| commit | 0ae0227fa31dda5bfc6b5a0145952d46fe57408b (patch) | |
| tree | d754494503f254c57b0c867e521d4b1d745b66f8 /rust/helpers/mutex.c | |
| parent | mm/memory: fix mapcount / refcount sanity check for mTHP reuse (diff) | |
| download | kernel-0ae0227fa31dda5bfc6b5a0145952d46fe57408b.tar.gz kernel-0ae0227fa31dda5bfc6b5a0145952d46fe57408b.zip | |
mm/codetag: move tag retrieval back upfront in __free_pages()
Commit 51ff4d7486f0 ("mm: avoid extra mem_alloc_profiling_enabled()
checks") introduces a possible use-after-free scenario, when page
is non-compound, page[0] could be released by other thread right
after put_page_testzero failed in current thread, pgalloc_tag_sub_pages
afterwards would manipulate an invalid page for accounting remaining
pages:
[timeline] [thread1] [thread2]
| alloc_page non-compound
V
| get_page, rf counter inc
V
| in ___free_pages
| put_page_testzero fails
V
| put_page, page released
V
| in ___free_pages,
| pgalloc_tag_sub_pages
| manipulate an invalid page
V
Restore __free_pages() to its state before, retrieve alloc tag
beforehand.
Link: https://lkml.kernel.org/r/[email protected]
Fixes: 51ff4d7486f0 ("mm: avoid extra mem_alloc_profiling_enabled() checks")
Signed-off-by: David Wang <[email protected]>
Acked-by: Suren Baghdasaryan <[email protected]>
Reviewed-by: Vlastimil Babka <[email protected]>
Cc: Brendan Jackman <[email protected]>
Cc: Johannes Weiner <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Shakeel Butt <[email protected]>
Cc: Vlastimil Babka <[email protected]>
Cc: Zi Yan <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Diffstat (limited to 'rust/helpers/mutex.c')
0 files changed, 0 insertions, 0 deletions
