Messages in this thread | | | Date | Sat, 25 Apr 2009 08:40:53 +0200 | From | Andi Kleen <> | Subject | Re: [rfc 2/2] x86, bts: use physically non-contiguous trace buffer |
| |
Markus Metzger wrote: > Use vmalloc to allocate the branch trace buffer. > > Peter Zijlstra suggested to use vmalloc rather than kmalloc to > allocate the potentially multi-page branch trace buffer. > > Is there a way to have vmalloc allocate a physically non-contiguous > buffer for test purposes? Ideally, the memory area would have big > holes in it with sensitive data in between so I would know immediately > when this is overwritten.
For test purposes you could hack vmalloc.c to allocate more pages and only put in every second/third/... into the mapping. You would just need to add another to loop to __vmalloc_area_node() that allocates more. That should give you non continuous mappings unless you're really unlucky.
-Andi
> > > Reported-by: Peter Zijlstra <a.p.zijlstra@chello.nl> > CC: Andrew Morton <akpm@linux-foundation.org> > Signed-off-by: Markus Metzger <markus.t.metzger@intel.com> > --- > arch/x86/kernel/ptrace.c | 5 3 + 2 - 0 ! > 1 file changed, 3 insertions(+), 2 deletions(-) > > Index: b/arch/x86/kernel/ptrace.c > =================================================================== > --- a/arch/x86/kernel/ptrace.c > +++ b/arch/x86/kernel/ptrace.c > @@ -22,6 +22,7 @@ > #include <linux/seccomp.h> > #include <linux/signal.h> > #include <linux/workqueue.h> > +#include <linux/vmalloc.h> > > #include <asm/uaccess.h> > #include <asm/pgtable.h> > @@ -626,7 +627,7 @@ static int alloc_bts_buffer(struct bts_c > if (err < 0) > return err; > > - buffer = kzalloc(size, GFP_KERNEL); > + buffer = vmalloc(size); > if (!buffer) > goto out_refund; > > @@ -646,7 +647,7 @@ static inline void free_bts_buffer(struc > if (!context->buffer) > return; > > - kfree(context->buffer); > + vfree(context->buffer); > context->buffer = NULL; > > refund_locked_memory(context->mm, context->size);
| |