summaryrefslogtreecommitdiffhomepage
path: root/runsc/fsgofer
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2021-04-21 17:47:50 +0000
committergVisor bot <gvisor-bot@google.com>2021-04-21 17:47:50 +0000
commit1b4035afb3411e3daa51e6ef123630e1d24d6341 (patch)
tree762633005c8ce0861e564914c53bf6bcab32f94a /runsc/fsgofer
parent03fd0836497d44a69439b8114eb2663ebf782040 (diff)
parentc2955339d86437981ce53d2971ce83479ef94028 (diff)
Merge release-20210419.0-12-gc2955339d (automated)
Diffstat (limited to 'runsc/fsgofer')
-rw-r--r--runsc/fsgofer/fsgofer.go57
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
-}