Messages in this thread | | | Subject | Re: [linux-next-20130422] Bug in SLAB? | From | Tetsuo Handa <> | Date | Tue, 2 Jul 2013 21:49:26 +0900 |
| |
Andrew Morton wrote: > Look, I'll make this easier: > > : Subject: slab: fix init_lock_keys > : > : In 3.10 kernels with CONFIG_LOCKDEP=y on architectures with > : PAGE_SHIFT + MAX_ORDER > 26 such as [architecture goes here], the kernel does > : [x] when the user does [y]. > : > : 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. > : > : Fix this by [z]. > > > Please fill in the text within []. > OK. I made from http://marc.info/?l=linux-kernel&m=136810234704350&w=2 . ----- Some architectures (e.g. powerpc built with CONFIG_PPC_256K_PAGES=y CONFIG_FORCE_MAX_ZONEORDER=11) get PAGE_SHIFT + MAX_ORDER > 26.
In 3.10 kernels, CONFIG_LOCKDEP=y with PAGE_SHIFT + MAX_ORDER > 26 makes init_lock_keys() dereference beyond kmalloc_caches[26]. This leads to an unbootable system (kernel panic at initializing SLAB) if one of kmalloc_caches[26...PAGE_SHIFT+MAX_ORDER-1] is not NULL.
Fix this by making sure that init_lock_keys() does not dereference beyond kmalloc_caches[26] arrays. -----
| |