• Mikhail Efremov's avatar
    vfs: Don't exchange "short" filenames unconditionally. · f1052d21
    Mikhail Efremov authored
    commit d2fa4a84 upstream.
    
    Only exchange source and destination filenames
    if flags contain RENAME_EXCHANGE.
    In case if executable file was running and replaced by
    other file /proc/PID/exe should still show correct file name,
    not the old name of the file by which it was replaced.
    
    The scenario when this bug manifests itself was like this:
    * ALT Linux uses rpm and start-stop-daemon;
    * during a package upgrade rpm creates a temporary file
      for an executable to rename it upon successful unpacking;
    * start-stop-daemon is run subsequently and it obtains
      the (nonexistant) temporary filename via /proc/PID/exe
      thus failing to identify the running process.
    
    Note that "long" filenames (> DNAiME_INLINE_LEN) are still
    exchanged without RENAME_EXCHANGE and this behaviour exists
    long enough (should be fixed too apparently).
    So this patch is just an interim workaround that restores
    behavior for "short" names as it was before changes
    introduced by commit da1ce067 ("vfs: add cross-rename").
    
    See https://lkml.org/lkml/2014/9/7/6 for details.
    
    AV: the comments about being more careful with ->d_name.hash
    than with ->d_name.name are from back in 2.3.40s; they
    became obsolete by 2.3.60s, when we started to unhash the
    target instead of swapping hash chain positions followed
    by d_delete() as we used to do when dcache was first
    introduced.
    Acked-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: linux-fsdevel@vger.kernel.org
    Fixes: da1ce067 "vfs: add cross-rename"
    Signed-off-by: default avatarMikhail Efremov <sem@altlinux.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
    [ luis: used Stefan's backport to 3.16 ]
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    f1052d21
dcache.c 87.7 KB