lkml.org 
[lkml]   [2020]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 03/10] arm64, kfence: enable KFENCE for ARM64
    On Tue, Sep 22, 2020 at 11:56:26AM +0200, Marco Elver wrote:
    > On Mon, 21 Sep 2020 at 19:44, Will Deacon <will@kernel.org> wrote:
    > [...]
    > > > > > > For ARM64, we would like to solicit feedback on what the best option is
    > > > > > > to obtain a constant address for __kfence_pool. One option is to declare
    > > > > > > a memory range in the memory layout to be dedicated to KFENCE (like is
    > > > > > > done for KASAN), however, it is unclear if this is the best available
    > > > > > > option. We would like to avoid touching the memory layout.
    > > > > >
    > > > > > Sorry for the delay on this.
    > > > >
    > > > > NP, thanks for looking!
    > > > >
    > > > > > Given that the pool is relatively small (i.e. when compared with our virtual
    > > > > > address space), dedicating an area of virtual space sounds like it makes
    > > > > > the most sense here. How early do you need it to be available?
    > > > >
    > > > > Yes, having a dedicated address sounds good.
    > > > > We're inserting kfence_init() into start_kernel() after timekeeping_init().
    > > > > So way after mm_init(), if that matters.
    > > >
    > > > The question is though, how big should that dedicated area be?
    > > > Right now KFENCE_NUM_OBJECTS can be up to 16383 (which makes the pool
    > > > size 64MB), but this number actually comes from the limitation on
    > > > static objects, so we might want to increase that number on arm64.
    > >
    > > What happens on x86 and why would we do something different?
    >
    > On x86 we just do `char __kfence_pool[KFENCE_POOL_SIZE] ...;` to
    > statically allocate the pool. On arm64 this doesn't seem to work
    > because static memory doesn't have struct pages?

    Are you using virt_to_page() directly on that statically-allocated
    __kfence_pool? If so you'll need to use lm_alias() if so, as is done in
    mm/kasan/init.c.

    Anything statically allocated is part of the kernel image address range
    rather than the linear/direct map, and doesn't have a valid virt addr,
    but its linear map alias does.

    If you enable CONFIG_DEBUG_VIRTUAL you should get warnings if missing
    lm_alias() calls.

    Thanks,
    Mark.

    \
     
     \ /
      Last update: 2020-09-29 15:54    [W:4.102 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site