All of lore.kernel.org
 help / color / mirror / Atom feed
From: Feng Tang <feng.tang@intel.com>
To: Andrew Morton <akpm@linux-foundation.org>,
	Vlastimil Babka <vbabka@suse.cz>,
	Christoph Lameter <cl@linux.com>,
	Pekka Enberg <penberg@kernel.org>,
	David Rientjes <rientjes@google.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Roman Gushchin <roman.gushchin@linux.dev>,
	Hyeonggon Yoo <42.hyeyoo@gmail.com>,
	Dmitry Vyukov <dvyukov@google.com>
Cc: Dave Hansen <dave.hansen@intel.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Feng Tang <feng.tang@intel.com>
Subject: [PATCH v4 0/4] mm/slub: some debug enhancements for kmalloc objects
Date: Mon, 29 Aug 2022 15:56:14 +0800	[thread overview]
Message-ID: <20220829075618.69069-1-feng.tang@intel.com> (raw)

kmalloc's API family is critical for mm, and one of its nature is that
it will round up the request size to a fixed one (mostly power of 2).
When user requests memory for '2^n + 1' bytes, actually 2^(n+1) bytes
could be allocated, so in worst case, there is around 50% memory space
waste.

The wastage is not a big issue for requests that get allocated/freed 
quickly, but may cause problems with objects that have longer life time,
and there were some OOM cases in some extrem cases.

This patchset tries to :
* Add a debug method to track each kmalloced object's wastage info,
  and show the call stack of original allocation (depends on
  SLAB_STORE_USER flag)
* Extend the redzone sanity check to the extra kmalloced buffer than
  requested, to better detect un-legitimate access to it. (depends
  on SLAB_STORE_USER & SLAB_RED_ZONE)

The redzone part has been tested with code below:

	for (shift = 3; shift <= 12; shift++) {
		size = 1 << shift;
		buf = kmalloc(size + 4, GFP_KERNEL);
		/* We have 96, 196 kmalloc size, which is not power of 2 */
		if (size == 64 || size == 128)
			oob_size = 16;
		else
			oob_size = size - 4;
		memset(buf + size + 4, 0xee, oob_size);
		kfree(buf);
	}

Please help to review, thanks!

- Feng

---
Changelogs:

  since v3:
    * rebase against latest post 6.0-rc1 slab tree's 'for-next' branch.
    * fix a bug reported by 0Day, that kmalloc-redzoned data and kasan's
      free meta data overlaps in the same kmalloc object data area 

  since v2:
    * rebase against slab tree's 'for-next' branch
    * fix pointer handling (Kefeng Wang)
    * move kzalloc zeroing handling change to a separate patch (Vlastimil Babka) 
    * make 'orig_size' only depend on KMALLOC & STORE_USER flag
      bits (Vlastimil Babka)

  since v1:
    * limit the 'orig_size' to kmalloc objects only, and save
      it after track in metadata (Vlastimil Babka)
    * fix a offset calculation problem in print_trailer

  since RFC:
    * fix problems in kmem_cache_alloc_bulk() and records sorting,
      improve the print format (Hyeonggon Yoo)
    * fix a compiling issue found by 0Day bot
    * update the commit log based info from iova developers

Feng Tang (4):
  mm/slub: enable debugging memory wasting of kmalloc
  mm/slub: only zero the requested size of buffer for kzalloc
  mm: kasan: Add free_meta size info in struct kasan_cache
  mm/slub: extend redzone check to cover extra allocated kmalloc space
    than requested

 include/linux/kasan.h |   2 +
 include/linux/slab.h  |   2 +
 mm/kasan/common.c     |   2 +
 mm/slab.c             |   6 +-
 mm/slab.h             |  13 +++-
 mm/slab_common.c      |   4 +
 mm/slub.c             | 168 +++++++++++++++++++++++++++++++++++++-----
 7 files changed, 172 insertions(+), 25 deletions(-)

-- 
2.34.1


             reply	other threads:[~2022-08-29  7:55 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-29  7:56 Feng Tang [this message]
2022-08-29  7:56 ` [PATCH v4 1/4] mm/slub: enable debugging memory wasting of kmalloc Feng Tang
2022-08-31 14:52   ` Hyeonggon Yoo
2022-09-01  5:04     ` Feng Tang
2022-09-01 11:14       ` Hyeonggon Yoo
2022-09-01 14:01   ` Hyeonggon Yoo
2022-09-02  6:15     ` Feng Tang
2022-09-04  9:03       ` Hyeonggon Yoo
2022-09-04  9:42         ` Feng Tang
2022-09-04 10:58           ` Hyeonggon Yoo
2022-09-05  2:55             ` Feng Tang
2022-09-05  6:29               ` Vlastimil Babka
2022-09-05  7:06                 ` Feng Tang
2022-09-05  7:33                   ` Vlastimil Babka
2022-09-05  8:37                     ` Feng Tang
2022-09-06 13:39                       ` Hyeonggon Yoo
2022-08-29  7:56 ` [PATCH v4 2/4] mm/slub: only zero the requested size of buffer for kzalloc Feng Tang
2022-08-29  7:56 ` [PATCH v4 3/4] mm: kasan: Add free_meta size info in struct kasan_cache Feng Tang
2022-08-29  7:56 ` [PATCH v4 4/4] mm/slub: extend redzone check to cover extra allocated kmalloc space than requested Feng Tang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220829075618.69069-1-feng.tang@intel.com \
    --to=feng.tang@intel.com \
    --cc=42.hyeyoo@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=dave.hansen@intel.com \
    --cc=dvyukov@google.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=vbabka@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.