• Al Viro's avatar
    fix copy_tree() regression · 12a5b529
    Al Viro authored
    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.
    
    Cc: stable@vger.kernel.org [3.14 and later]
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    12a5b529
namespace.c 72.7 KB