c0a32fc5a2
With CONFIG_DEBUG_PAGEALLOC configured, the CPU will generate an exception on access (read,write) to an unallocated page, which permits us to catch code which corrupts memory. However the kernel is trying to maximise memory usage, hence there are usually few free pages in the system and buggy code usually corrupts some crucial data. This patch changes the buddy allocator to keep more free/protected pages and to interlace free/protected and allocated pages to increase the probability of catching corruption. When the kernel is compiled with CONFIG_DEBUG_PAGEALLOC, debug_guardpage_minorder defines the minimum order used by the page allocator to grant a request. The requested size will be returned with the remaining pages used as guard pages. The default value of debug_guardpage_minorder is zero: no change from current behaviour. [akpm@linux-foundation.org: tweak documentation, s/flg/flag/] Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Cc: Mel Gorman <mgorman@suse.de> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: "Rafael J. Wysocki" <rjw@sisk.pl> Cc: Christoph Lameter <cl@linux-foundation.org> Cc: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
32 lines
967 B
C
32 lines
967 B
C
#ifndef LINUX_PAGE_DEBUG_FLAGS_H
|
|
#define LINUX_PAGE_DEBUG_FLAGS_H
|
|
|
|
/*
|
|
* page->debug_flags bits:
|
|
*
|
|
* PAGE_DEBUG_FLAG_POISON is set for poisoned pages. This is used to
|
|
* implement generic debug pagealloc feature. The pages are filled with
|
|
* poison patterns and set this flag after free_pages(). The poisoned
|
|
* pages are verified whether the patterns are not corrupted and clear
|
|
* the flag before alloc_pages().
|
|
*/
|
|
|
|
enum page_debug_flags {
|
|
PAGE_DEBUG_FLAG_POISON, /* Page is poisoned */
|
|
PAGE_DEBUG_FLAG_GUARD,
|
|
};
|
|
|
|
/*
|
|
* Ensure that CONFIG_WANT_PAGE_DEBUG_FLAGS reliably
|
|
* gets turned off when no debug features are enabling it!
|
|
*/
|
|
|
|
#ifdef CONFIG_WANT_PAGE_DEBUG_FLAGS
|
|
#if !defined(CONFIG_PAGE_POISONING) && \
|
|
!defined(CONFIG_PAGE_GUARD) \
|
|
/* && !defined(CONFIG_PAGE_DEBUG_SOMETHING_ELSE) && ... */
|
|
#error WANT_PAGE_DEBUG_FLAGS is turned on with no debug features!
|
|
#endif
|
|
#endif /* CONFIG_WANT_PAGE_DEBUG_FLAGS */
|
|
|
|
#endif /* LINUX_PAGE_DEBUG_FLAGS_H */
|