diff options
author | Dean Deng <deandeng@google.com> | 2020-08-05 18:15:01 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-08-05 18:16:57 -0700 |
commit | 7ed4b2b5a6928b3a4a88d0117a764dd4795be61a (patch) | |
tree | 70002659313bf61bc82cc7cb6be653208f221e0b | |
parent | ce463c027b0d3cbcf3b9d3e2a5ad598c0249212f (diff) |
Correctly decrement link counts in tmpfs rename operations.
When a directory is replaced by a rename operation, its link count should
reach zero. We were missing the link from `dir/.`
PiperOrigin-RevId: 325141730
-rw-r--r-- | pkg/sentry/fsimpl/tmpfs/filesystem.go | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/pkg/sentry/fsimpl/tmpfs/filesystem.go b/pkg/sentry/fsimpl/tmpfs/filesystem.go index fb77f95cc..065812065 100644 --- a/pkg/sentry/fsimpl/tmpfs/filesystem.go +++ b/pkg/sentry/fsimpl/tmpfs/filesystem.go @@ -566,7 +566,9 @@ func (fs *filesystem) RenameAt(ctx context.Context, rp *vfs.ResolvingPath, oldPa if replaced != nil { newParentDir.removeChildLocked(replaced) if replaced.inode.isDir() { - newParentDir.inode.decLinksLocked(ctx) // from replaced's ".." + // Remove links for replaced/. and replaced/.. + replaced.inode.decLinksLocked(ctx) + newParentDir.inode.decLinksLocked(ctx) } replaced.inode.decLinksLocked(ctx) } |