Hi, On Nov 29, 2007 9:02 AM, Pekka Enberg <[EMAIL PROTECTED]> wrote: > Hi Vegard, > > On Nov 27, 2007 5:16 PM, Vegard Nossum <[EMAIL PROTECTED]> wrote: > > +config KMEMCHECK > > + bool "Trap use of uninitialized memory" > > + depends on X86_32 && !CC_OPTIMIZE_FOR_SIZE > > + help > > + This option enables tracing of dynamically allocated kernel memory > > + to see if memory is used before it has been given an initial > > value. > > + Be aware that this requires half of your memory for bookkeeping > > and > > + will insert extra code at *every* read and write to tracked memory > > + thus slow down the kernel code (but user code is unaffected). > > Is it really necessary to track every memory address? Tracking slab > objects would require far less memory. You might also want to make > kzalloc() and GFP_ZERO mark the memory area as initialized to avoid > some page faults.
Yes, we are in fact only tracking the memory within SLUB allocations (minus what SLUB itself needs for bookkeeping -- like the caches). Maybe the Kconfig text was unclear? As for the kzalloc() and GFP_ZERO, I believe these will write zeros to the data in question before the memory is returned to the caller. In that case, the area will be "automatically" set to initialized since these writes are also intercepted by kmemcheck. If not, I will have to investigate some more :-) > On Nov 27, 2007 5:16 PM, Vegard Nossum <[EMAIL PROTECTED]> wrote: > > + /* Actually allocate twice as much, since we need to track the > > + * status of each byte within the allocation. */ > > + if (!(flags & __GFP_NOTRACK)) { > > If you change __GFP_NOTRACK to __GFP_TRACK, you can avoid the double > negation here. I deliberately chose this form. Here is my rationale: By default, when kmemcheck is enabled, we want to track as much as possible. So every "normal" allocation should be tracked. It seems easier to make an exception for the pages that should *not* be tracked (like the SLUB caches, DMA allocations), since this group of allocations is much smaller than the group of allocations that should be tracked. I could embed __GFP_TRACK into GFP_KERNEL, but then I would have to mask this out at every non-tracked allocation, which leaves us with the exact opposite problem, just in a different place. Thank you for looking :) > > Pekka > Vegard - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/