Skip to content

Commit 28fdd55

Browse files
committed
refine logging and add path validation in utils.go
1 parent 69e08c0 commit 28fdd55

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

pkg/driver/utils.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ import (
1717
)
1818

1919
func NewNodeServer(n *SeaweedFsDriver) *NodeServer {
20-
if n.CacheDir != "" && n.CacheDir != os.TempDir() {
21-
if err := removeDirContent(n.CacheDir); err != nil {
22-
glog.Warning("error cleaning up cache dir")
20+
if n.CacheDir != "" {
21+
cleanCacheDir := filepath.Clean(n.CacheDir)
22+
cleanTempDir := filepath.Clean(os.TempDir())
23+
if cleanCacheDir != cleanTempDir {
24+
if err := removeDirContent(cleanCacheDir); err != nil {
25+
glog.Warningf("error cleaning up cache dir %s: %v", cleanCacheDir, err)
26+
}
2327
}
2428
}
2529

@@ -42,8 +46,21 @@ func GetLocalSocket(volumeSocketDir, volumeID string) string {
4246

4347
func CleanupVolumeResources(driver *SeaweedFsDriver, volumeID string) {
4448
cacheDir := GetCacheDir(driver.CacheDir, volumeID)
45-
if err := os.RemoveAll(cacheDir); err != nil {
46-
glog.Warningf("failed to remove cache dir %s for volume %s: %v", cacheDir, volumeID, err)
49+
50+
// Validate that cacheDir is within cacheBase to prevent path traversal
51+
cacheBase := driver.CacheDir
52+
if cacheBase == "" {
53+
cacheBase = os.TempDir()
54+
}
55+
cleanCacheBase := filepath.Clean(cacheBase)
56+
cleanCacheDir := filepath.Clean(cacheDir)
57+
rel, err := filepath.Rel(cleanCacheBase, cleanCacheDir)
58+
if err == nil && rel != "." && !strings.HasPrefix(rel, "..") {
59+
if err := os.RemoveAll(cleanCacheDir); err != nil {
60+
glog.Warningf("failed to remove cache dir %s for volume %s: %v", cleanCacheDir, volumeID, err)
61+
}
62+
} else {
63+
glog.Warningf("skipping cache dir removal for volume %s: invalid path %s (rel: %s, err: %v)", volumeID, cleanCacheDir, rel, err)
4764
}
4865

4966
localSocket := GetLocalSocket(driver.volumeSocketDir, volumeID)

0 commit comments

Comments
 (0)