Messages in this thread Patch in this message | | | Date | Thu, 9 May 2013 14:14:31 +0000 | From | Christoph Lameter <> | Subject | Re: [linux-next-20130422] Bug in SLAB? |
| |
On Thu, 9 May 2013, Tetsuo Handa wrote:
> + BUILD_BUG_ON(PAGE_SHIFT + MAX_ORDER != KMALLOC_SHIFT_HIGH + 1); > for (i = 1; i < PAGE_SHIFT + MAX_ORDER; i++) {
Yea looping to PAGE_SHIFT + MAX_ORDER is fundamentally wrong.
Subject: SLAB: Fix init_lock_keys()
init_lock_keys goes too far in initializing values in kmalloc_caches because it assumed that the size of the kmalloc array goes up to MAX_ORDER. However, the size of the kmalloc array for SLAB may be restricted due to increased page sizes or CONFIG_FORCE_MAX_ZONEORDER.
Reported-by: Tetsuo Handa <penguin-kernel@I-Love.SAKURA.ne.jp> Signed-off-by: Christoph Lameter <cl@linux.com>
Index: linux/mm/slab.c =================================================================== --- linux.orig/mm/slab.c 2013-05-09 09:06:20.000000000 -0500 +++ linux/mm/slab.c 2013-05-09 09:08:08.338606055 -0500 @@ -565,7 +565,7 @@ static void init_node_lock_keys(int q) if (slab_state < UP) return;
- for (i = 1; i < PAGE_SHIFT + MAX_ORDER; i++) { + for (i = 1; i =< KMALLOC_SHIFT_HIGH; i++) { struct kmem_cache_node *n; struct kmem_cache *cache = kmalloc_caches[i];
| |