summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/fs/ramfs/dir.go
diff options
context:
space:
mode:
authorRuidong Cao <crdfrank@gmail.com>2019-02-28 16:43:59 -0800
committerShentubot <shentubot@google.com>2019-02-28 16:44:54 -0800
commit3851705a73235baa6d153970c95921d17a39d77a (patch)
treed2840dc6b064f836c967e313bfb6841c16546e88 /pkg/sentry/fs/ramfs/dir.go
parentf7df9d72cf1d10922ff5a55ef5664b4325439ef5 (diff)
Fix procfs bugs
Current procfs has some bugs. After executing ls twice, many dirs come out with same name like "1" or ".". Files like "cpuinfo" disappear. Here variable names is a slice with cap() > len(). Sort after appending to it will not alloc a new space and impact orignal slice. Same to m. Signed-off-by: Ruidong Cao <crdfrank@gmail.com> Change-Id: I83e5cd1c7968c6fe28c35ea4fee497488d4f9eef PiperOrigin-RevId: 236222270
Diffstat (limited to 'pkg/sentry/fs/ramfs/dir.go')
-rw-r--r--pkg/sentry/fs/ramfs/dir.go13
1 files changed, 12 insertions, 1 deletions
diff --git a/pkg/sentry/fs/ramfs/dir.go b/pkg/sentry/fs/ramfs/dir.go
index 696825eb5..4da876ebd 100644
--- a/pkg/sentry/fs/ramfs/dir.go
+++ b/pkg/sentry/fs/ramfs/dir.go
@@ -148,7 +148,18 @@ func (d *Dir) FindChild(name string) (*fs.Inode, bool) {
func (d *Dir) Children() ([]string, map[string]fs.DentAttr) {
d.mu.Lock()
defer d.mu.Unlock()
- return d.dentryMap.GetAll()
+
+ // Return a copy to prevent callers from modifying our children.
+ names, entries := d.dentryMap.GetAll()
+ namesCopy := make([]string, len(names))
+ copy(namesCopy, names)
+
+ entriesCopy := make(map[string]fs.DentAttr)
+ for k, v := range entries {
+ entriesCopy[k] = v
+ }
+
+ return namesCopy, entriesCopy
}
// removeChildLocked attempts to remove an entry from this directory.