mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
slub: add back check for free nonslab objects
After commitf227f0faf6
("slub: fix unreclaimable slab stat for bulk free"), the check for free nonslab page is replaced by VM_BUG_ON_PAGE, which only check with CONFIG_DEBUG_VM enabled, but this config may impact performance, so it only for debug. Commit0937502af7
("slub: Add check for kfree() of non slab objects.") add the ability, which should be needed in any configs to catch the invalid free, they even could be potential issue, eg, memory corruption, use after free and double free, so replace VM_BUG_ON_PAGE to WARN_ON_ONCE, add object address printing to help use to debug the issue. Link: https://lkml.kernel.org/r/20210930070214.61499-1-wangkefeng.wang@huawei.com Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Shakeel Butt <shakeelb@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rienjes <rientjes@google.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ffc95a46d6
commit
d0fe47c641
@ -3522,7 +3522,9 @@ static inline void free_nonslab_page(struct page *page, void *object)
|
|||||||
{
|
{
|
||||||
unsigned int order = compound_order(page);
|
unsigned int order = compound_order(page);
|
||||||
|
|
||||||
VM_BUG_ON_PAGE(!PageCompound(page), page);
|
if (WARN_ON_ONCE(!PageCompound(page)))
|
||||||
|
pr_warn_once("object pointer: 0x%p\n", object);
|
||||||
|
|
||||||
kfree_hook(object);
|
kfree_hook(object);
|
||||||
mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE_B, -(PAGE_SIZE << order));
|
mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE_B, -(PAGE_SIZE << order));
|
||||||
__free_pages(page, order);
|
__free_pages(page, order);
|
||||||
|
Loading…
Reference in New Issue
Block a user