• Al Viro's avatar
    fix copy_tree() regression · 3fd72a0e
    Al Viro authored
    commit 12a5b529 upstream.
    
    Since 3.14 we had copy_tree() get the shadowing wrong - if we had one
    vfsmount shadowing another (i.e. if A is a slave of B, C is mounted
    on A/foo, then D got mounted on B/foo creating D' on A/foo shadowed
    by C), copy_tree() of A would make a copy of D' shadow the the copy of
    C, not the other way around.
    
    It's easy to fix, fortunately - just make sure that mount follows
    the one that shadows it in mnt_child as well as in mnt_hash, and when
    copy_tree() decides to attach a new mount, check if the last child
    it has added to the same parent should be shadowing the new one.
    And if it should, just use the same logics commit_tree() has - put the
    new mount into the hash and children lists right after the one that
    should shadow it.
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3fd72a0e
namespace.c 74.5 KB