Re: [PATCH resend] slub: Add back check for free nonslab objects
From: Kefeng Wang <hidden>
Date: 2021-09-29 02:06:21
On 2021/9/28 23:43, Matthew Wilcox wrote:
On Mon, Sep 27, 2021 at 03:53:47PM +0800, Kefeng Wang wrote:quoted
On 2021/9/27 15:22, Vlastimil Babka wrote:quoted
On 9/27/21 04:15, Kefeng Wang wrote:quoted
After commit ("f227f0faf63b 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. Commit ("0937502af7c9 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, and add dump_page() to help use to debug the issue.There are other situations in SLUB (such as with smaller allocations that don't go directly to page allocator) where use after free and double-free are undetected in non-debug configs, and it's expected that anyone debugging them will enable slub_debug or even DEBUG_VM. Why should this special case with nonslab pages be different?I want the check back in kfree, this one is used widely in driver, and the probability of problem occurred is bigger in driver, especially in some out of tree drivers.Why would we want to improve life for out of tree drivers? Drivers should be in-tree. That's been the Linux Way for thirty years. I remain sceptical that dump_page() is actually useful for debugging drivers anyway. dump_stack(), I could see -- that'll tell you which driver called kfree() on a bogus pointer. But how does dump_page() help?
Add dump_page here because it could help us debug for memory corruption, if we think it is redundant, I could drop it in the next version.
.