Skip to content

Commit e60cd06

Browse files
author
Dongsu Park
committed
validation: check for invalid symlink inside container
Deliberately create an invalid read-only symlink that points out of the container, to see if the test fails inside the container. Signed-off-by: Dongsu Park <dongsu@kinvolk.io>
1 parent 5dd461f commit e60cd06

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

validation/linux_readonly_paths.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,40 @@ func checkReadonlyRelPaths() error {
8686
return fmt.Errorf("expected: err != nil, actual: err == nil")
8787
}
8888

89+
func checkReadonlySymlinks() error {
90+
g, err := util.GetDefaultGenerator()
91+
if err != nil {
92+
return err
93+
}
94+
95+
// Deliberately create a read-only symlink that points an invalid file,
96+
// and expect an error.
97+
readonlySymlink := "/readonly-symlink"
98+
99+
g.AddLinuxReadonlyPaths(readonlySymlink)
100+
err = util.RuntimeInsideValidate(g, func(path string) error {
101+
testFile := filepath.Join(path, readonlySymlink)
102+
// ln -s .. /readonly-symlink ; readlink -f /readonly-symlink; ls -L /readonly-symlink
103+
if err := os.Symlink("../readonly-symlink", testFile); err != nil {
104+
return err
105+
}
106+
rPath, errR := os.Readlink(testFile)
107+
if errR != nil {
108+
return errR
109+
}
110+
_, errS := os.Stat(rPath)
111+
if errS != nil && os.IsNotExist(errS) {
112+
return errS
113+
}
114+
115+
return nil
116+
})
117+
if err != nil {
118+
return nil
119+
}
120+
return fmt.Errorf("expected: err != nil, actual: err == nil")
121+
}
122+
89123
func main() {
90124
if err := checkReadonlyPaths(); err != nil {
91125
util.Fatal(err)
@@ -94,4 +128,9 @@ func main() {
94128
if err := checkReadonlyRelPaths(); err != nil {
95129
util.Fatal(err)
96130
}
131+
132+
if err := checkReadonlySymlinks(); err != nil {
133+
util.Fatal(err)
134+
}
135+
97136
}

0 commit comments

Comments
 (0)