diff options
-rw-r--r-- | pkg/sentry/fsimpl/gofer/filesystem.go | 3 | ||||
-rw-r--r-- | test/syscalls/BUILD | 1 |
2 files changed, 3 insertions, 1 deletions
diff --git a/pkg/sentry/fsimpl/gofer/filesystem.go b/pkg/sentry/fsimpl/gofer/filesystem.go index 21eb976cb..5501781ac 100644 --- a/pkg/sentry/fsimpl/gofer/filesystem.go +++ b/pkg/sentry/fsimpl/gofer/filesystem.go @@ -1196,7 +1196,8 @@ func (fs *filesystem) RenameAt(ctx context.Context, rp *vfs.ResolvingPath, oldPa if newParent.cachedMetadataAuthoritative() { newParent.dirents = nil newParent.touchCMtime() - if renamed.isDir() { + if renamed.isDir() && (replaced == nil || !replaced.isDir()) { + // Increase the link count if we did not replace another directory. newParent.incLinks() } } diff --git a/test/syscalls/BUILD b/test/syscalls/BUILD index 7b0248a39..131f09ab4 100644 --- a/test/syscalls/BUILD +++ b/test/syscalls/BUILD @@ -572,6 +572,7 @@ syscall_test( size = "medium", add_overlay = True, test = "//test/syscalls/linux:rename_test", + vfs2 = "True", ) syscall_test( |