• Nick Piggin's avatar
    fs: d_validate fixes · 786a5e15
    Nick Piggin authored
    d_validate has been broken for a long time.
    
    kmem_ptr_validate does not guarantee that a pointer can be dereferenced
    if it can go away at any time. Even rcu_read_lock doesn't help, because
    the pointer might be queued in RCU callbacks but not executed yet.
    
    So the parent cannot be checked, nor the name hashed. The dentry pointer
    can not be touched until it can be verified under lock. Hashing simply
    cannot be used.
    
    Instead, verify the parent/child relationship by traversing parent's
    d_child list. It's slow, but only ncpfs and the destaged smbfs care
    about it, at this point.
    Signed-off-by: default avatarNick Piggin <npiggin@kernel.dk>
    786a5e15
dcache.c 62.2 KB