diff options
author | gVisor bot <gvisor-bot@google.com> | 2021-04-21 17:47:50 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-04-21 17:47:50 +0000 |
commit | 1b4035afb3411e3daa51e6ef123630e1d24d6341 (patch) | |
tree | 762633005c8ce0861e564914c53bf6bcab32f94a /runsc/fsgofer | |
parent | 03fd0836497d44a69439b8114eb2663ebf782040 (diff) | |
parent | c2955339d86437981ce53d2971ce83479ef94028 (diff) |
Merge release-20210419.0-12-gc2955339d (automated)
Diffstat (limited to 'runsc/fsgofer')
-rw-r--r-- | runsc/fsgofer/fsgofer.go | 57 |
1 files changed, 3 insertions, 54 deletions
diff --git a/runsc/fsgofer/fsgofer.go b/runsc/fsgofer/fsgofer.go index b81ede5ae..e04ddda47 100644 --- a/runsc/fsgofer/fsgofer.go +++ b/runsc/fsgofer/fsgofer.go @@ -21,7 +21,6 @@ package fsgofer import ( - "errors" "fmt" "io" "math" @@ -59,6 +58,9 @@ var verityXattrs = map[string]struct{}{ // join is equivalent to path.Join() but skips path.Clean() which is expensive. func join(parent, child string) string { + if child == "." || child == ".." { + panic(fmt.Sprintf("invalid child path %q", child)) + } return parent + "/" + child } @@ -1224,56 +1226,3 @@ func (l *localFile) checkROMount() error { } return nil } - -func (l *localFile) MultiGetAttr(names []string) ([]p9.FullStat, error) { - stats := make([]p9.FullStat, 0, len(names)) - - if len(names) > 0 && names[0] == "" { - qid, valid, attr, err := l.GetAttr(p9.AttrMask{}) - if err != nil { - return nil, err - } - stats = append(stats, p9.FullStat{ - QID: qid, - Valid: valid, - Attr: attr, - }) - names = names[1:] - } - - parent := l.file.FD() - for _, name := range names { - child, err := unix.Openat(parent, name, openFlags|unix.O_PATH, 0) - if parent != l.file.FD() { - // Parent is no longer needed. - _ = unix.Close(parent) - } - if err != nil { - if errors.Is(err, unix.ENOENT) { - // No pont in continuing any further. - break - } - return nil, err - } - - var stat unix.Stat_t - if err := unix.Fstat(child, &stat); err != nil { - _ = unix.Close(child) - return nil, err - } - valid, attr := l.fillAttr(&stat) - stats = append(stats, p9.FullStat{ - QID: l.attachPoint.makeQID(&stat), - Valid: valid, - Attr: attr, - }) - if (stat.Mode & unix.S_IFMT) != unix.S_IFDIR { - // Doesn't need to continue if entry is not a dir. Including symlinks - // that cannot be followed. - _ = unix.Close(child) - break - } - parent = child - } - return stats, nil -} |