• Waiman Long's avatar
    mm/slub: fix incorrect interpretation of s->offset · cbfc35a4
    Waiman Long authored
    In a couple of places in the slub memory allocator, the code uses
    "s->offset" as a check to see if the free pointer is put right after the
    object.  That check is no longer true with commit 3202fa62 ("slub:
    relocate freelist pointer to middle of object").
    
    As a result, echoing "1" into the validate sysfs file, e.g.  of dentry,
    may cause a bunch of "Freepointer corrupt" error reports like the
    following to appear with the system in panic afterwards.
    
      =============================================================================
      BUG dentry(666:pmcd.service) (Tainted: G    B): Freepointer corrupt
      -----------------------------------------------------------------------------
    
    To fix it, use the check "s->offset == s->inuse" in the new helper
    function freeptr_outside_object() instead.  Also add another helper
    function get_info_end() to return the end of info block (inuse + free
    pointer if not overlapping with object).
    
    Fixes: 3202fa62 ("slub: relocate freelist pointer to middle of object")
    Signed-off-by: default avatarWaiman Long <longman@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Acked-by: default avatarRafael Aquini <aquini@redhat.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Vitaly Nikolenko <vnik@duasynt.com>
    Cc: Silvio Cesare <silvio.cesare@gmail.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Markus Elfring <Markus.Elfring@web.de>
    Cc: Changbin Du <changbin.du@gmail.com>
    Link: http://lkml.kernel.org/r/20200429135328.26976-1-longman@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    cbfc35a4
slub.c 145 KB