lkml.org 
[lkml]   [2009]   [Apr]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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);



    \
     
     \ /
      Last update: 2009-04-25 08:43    [W:0.023 / U:30.368 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site