• Dan Williams's avatar
    list: kill list_force_poison() · d77a117e
    Dan Williams authored
    Given we have uninitialized list_heads being passed to list_add() it
    will always be the case that those uninitialized values randomly trigger
    the poison value.  Especially since a list_add() operation will seed the
    stack with the poison value for later stack allocations to trip over.
    
    For example, see these two false positive reports:
    
      list_add attempted on force-poisoned entry
      WARNING: at lib/list_debug.c:34
      [..]
      NIP [c00000000043c390] __list_add+0xb0/0x150
      LR [c00000000043c38c] __list_add+0xac/0x150
      Call Trace:
        __list_add+0xac/0x150 (unreliable)
        __down+0x4c/0xf8
        down+0x68/0x70
        xfs_buf_lock+0x4c/0x150 [xfs]
    
      list_add attempted on force-poisoned entry(0000000000000500),
       new->next == d0000000059ecdb0, new->prev == 0000000000000500
      WARNING: at lib/list_debug.c:33
      [..]
      NIP [c00000000042db78] __list_add+0xa8/0x140
      LR [c00000000042db74] __list_add+0xa4/0x140
      Call Trace:
        __list_add+0xa4/0x140 (unreliable)
        rwsem_down_read_failed+0x6c/0x1a0
        down_read+0x58/0x60
        xfs_log_commit_cil+0x7c/0x600 [xfs]
    
    Fixes: commit 5c2c2587 ("mm, dax, pmem: introduce {get|put}_dev_pagemap() for dax-gup")
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Reported-by: default avatarEryu Guan <eguan@redhat.com>
    Tested-by: default avatarEryu Guan <eguan@redhat.com>
    Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d77a117e
list_debug.c 2.59 KB