vfs: fix race condition caused by unlocked reading of Dir.path

This commit is contained in:
Nick Craig-Wood 2020-02-27 15:50:41 +00:00
parent 87d856d71b
commit 3c91abce74
2 changed files with 3 additions and 2 deletions

View file

@ -476,15 +476,16 @@ func (d *Dir) Stat(name string) (node Node, err error) {
func (d *Dir) ReadDirAll() (items Nodes, err error) {
// fs.Debugf(d.path, "Dir.ReadDirAll")
d.mu.Lock()
defer d.mu.Unlock()
err = d._readDir()
if err != nil {
fs.Debugf(d.path, "Dir.ReadDirAll error: %v", err)
d.mu.Unlock()
return nil, err
}
for _, item := range d.items {
items = append(items, item)
}
d.mu.Unlock()
sort.Sort(items)
// fs.Debugf(d.path, "Dir.ReadDirAll OK with %d entries", len(items))
return items, nil

View file

@ -91,7 +91,7 @@ func (f *File) Name() (name string) {
// _path returns the full path of the file
// use when lock is held
func (f *File) _path() string {
return path.Join(f.d.path, f.leaf)
return path.Join(f.d.Path(), f.leaf)
}
// Path returns the full path of the file