lkml.org 
[lkml]   [2014]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v3 08/13] mm: slub: introduce metadata_access_enable()/metadata_access_disable()
    Looks good to me.

    On Wed, Sep 24, 2014 at 5:44 AM, Andrey Ryabinin <a.ryabinin@samsung.com> wrote:
    > Wrap access to object's metadata in external functions with
    > metadata_access_enable()/metadata_access_disable() function calls.
    >
    > This hooks separates payload accesses from metadata accesses
    > which might be useful for different checkers (e.g. KASan).
    >
    > Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com>
    > ---
    > mm/slub.c | 16 ++++++++++++++++
    > 1 file changed, 16 insertions(+)
    >
    > diff --git a/mm/slub.c b/mm/slub.c
    > index 82282f5..9b1f75c 100644
    > --- a/mm/slub.c
    > +++ b/mm/slub.c
    > @@ -467,13 +467,23 @@ static int slub_debug;
    > static char *slub_debug_slabs;
    > static int disable_higher_order_debug;
    >
    > +static inline void metadata_access_enable(void)
    > +{
    > +}
    > +
    > +static inline void metadata_access_disable(void)
    > +{
    > +}
    > +
    > /*
    > * Object debugging
    > */
    > static void print_section(char *text, u8 *addr, unsigned int length)
    > {
    > + metadata_access_enable();
    > print_hex_dump(KERN_ERR, text, DUMP_PREFIX_ADDRESS, 16, 1, addr,
    > length, 1);
    > + metadata_access_disable();
    > }
    >
    > static struct track *get_track(struct kmem_cache *s, void *object,
    > @@ -503,7 +513,9 @@ static void set_track(struct kmem_cache *s, void *object,
    > trace.max_entries = TRACK_ADDRS_COUNT;
    > trace.entries = p->addrs;
    > trace.skip = 3;
    > + metadata_access_enable();
    > save_stack_trace(&trace);
    > + metadata_access_disable();
    >
    > /* See rant in lockdep.c */
    > if (trace.nr_entries != 0 &&
    > @@ -677,7 +689,9 @@ static int check_bytes_and_report(struct kmem_cache *s, struct page *page,
    > u8 *fault;
    > u8 *end;
    >
    > + metadata_access_enable();
    > fault = memchr_inv(start, value, bytes);
    > + metadata_access_disable();
    > if (!fault)
    > return 1;
    >
    > @@ -770,7 +784,9 @@ static int slab_pad_check(struct kmem_cache *s, struct page *page)
    > if (!remainder)
    > return 1;
    >
    > + metadata_access_enable();
    > fault = memchr_inv(end - remainder, POISON_INUSE, remainder);
    > + metadata_access_disable();
    > if (!fault)
    > return 1;
    > while (end > fault && end[-1] == POISON_INUSE)
    > --
    > 2.1.1
    >


    \
     
     \ /
      Last update: 2014-09-26 06:41    [W:3.590 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site