• Suren Baghdasaryan's avatar
    mm: fix non-compound multi-order memory accounting in __free_pages · cc92eba1
    Suren Baghdasaryan authored
    When a non-compound multi-order page is freed, it is possible that a
    speculative reference keeps the page pinned.  In this case we free all
    pages except for the first page, which will be freed later by the last
    put_page().  However the page passed to put_page() is indistinguishable
    from an order-0 page, so it cannot do the accounting, just as it cannot
    free the subsequent pages.  Do the accounting here, where we free the
    pages.
    
    Link: https://lkml.kernel.org/r/20240321163705.3067592-21-surenb@google.comReported-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
    Tested-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Alex Gaynor <alex.gaynor@gmail.com>
    Cc: Alice Ryhl <aliceryhl@google.com>
    Cc: Andreas Hindborg <a.hindborg@samsung.com>
    Cc: Benno Lossin <benno.lossin@proton.me>
    Cc: "Björn Roy Baron" <bjorn3_gh@protonmail.com>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Dennis Zhou <dennis@kernel.org>
    Cc: Gary Guo <gary@garyguo.net>
    Cc: Kent Overstreet <kent.overstreet@linux.dev>
    Cc: Miguel Ojeda <ojeda@kernel.org>
    Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Wedson Almeida Filho <wedsonaf@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    cc92eba1
page_alloc.c 193 KB