All of lore.kernel.org
 help / color / mirror / Atom feed
From: greearb@candelatech.com
To: linux-kernel@vger.kernel.org
Cc: Ben Greear <greearb@candelatech.com>
Subject: [PATCH 2/2] slub:  Add method to verify memory is not deleted.
Date: Mon, 27 Jun 2011 16:17:11 -0700	[thread overview]
Message-ID: <1309216631-31493-3-git-send-email-greearb@candelatech.com> (raw)
In-Reply-To: <1309216631-31493-1-git-send-email-greearb@candelatech.com>

From: Ben Greear <greearb@candelatech.com>

This is for tracking down suspect memory usage.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---
:100644 100644 ad4dd1c... 35a13d2... M	include/linux/slab.h
:100644 100644 14d0135... b3d7680... M	mm/slub.c
 include/linux/slab.h |    9 +++++++++
 mm/slub.c            |   34 ++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/include/linux/slab.h b/include/linux/slab.h
index ad4dd1c..35a13d2 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -302,6 +302,15 @@ extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, unsigned long);
 
 #endif /* CONFIG_NUMA */
 
+/** Calling this on deleted objects will print some
+ * SLUB debugging information.
+ */
+#if defined(CONFIG_SLUB) && defined(CONFIG_SLUB_DEBUG)
+extern bool verify_mem_not_deleted(const void *x);
+#else
+#define verify_mem_not_deleted(x)
+#endif
+
 /*
  * Shortcuts
  */
diff --git a/mm/slub.c b/mm/slub.c
index 14d0135..b3d7680 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -2953,6 +2953,40 @@ size_t ksize(const void *object)
 }
 EXPORT_SYMBOL(ksize);
 
+#if defined(CONFIG_SLUB_DEBUG)
+bool verify_mem_not_deleted(const void *x)
+{
+	struct page *page;
+	void *object = (void *)x;
+	struct kmem_cache *s;
+	unsigned long flags;
+	bool rv = false;
+
+	if (unlikely(ZERO_OR_NULL_PTR(x)))
+		false;
+
+	local_irq_save(flags);
+
+	page = virt_to_head_page(x);
+	if (unlikely(!PageSlab(page))) {
+		BUG_ON(!PageCompound(page));
+		goto out_unlock;
+	}
+
+	s = page->slab;
+
+	if (on_freelist(s, page, object)) {
+		object_err(s, page, object, "Object is on fee-list");
+		goto out_unlock;
+	}
+	rv = true;
+out_unlock:
+	local_irq_restore(flags);
+	return rv;
+}
+EXPORT_SYMBOL(verify_mem_not_deleted);
+#endif
+
 void kfree(const void *x)
 {
 	struct page *page;
-- 
1.7.3.4


  parent reply	other threads:[~2011-06-27 23:17 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-27 23:17 [PATCH 0/2] SLUB memory debugging improvements greearb
2011-06-27 23:17 ` [PATCH 1/2] slub: Enable backtrace for create/delete points greearb
2011-06-27 23:17 ` greearb [this message]
2011-06-27 23:28   ` [PATCH 2/2] slub: Add method to verify memory is not deleted David Rientjes
2011-06-27 23:46     ` Ben Greear
2011-06-28  0:18       ` Ben Greear
2011-06-28  0:19       ` David Rientjes
2011-06-28  0:24         ` Ben Greear
2011-06-28  3:45           ` Ben Greear

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=1309216631-31493-3-git-send-email-greearb@candelatech.com \
    --to=greearb@candelatech.com \
    --cc=linux-kernel@vger.kernel.org \
    /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.