Fix possible nil pointer derefence in fs_util.go (#1813)

When os.Stat returns an error different from ErrNotExist,
mkdirAllWithPermissions may panic with a nil pointer
derefence due to insufficient error checking.

Avoid the panic by bailing out, returning the error to the
caller.
This commit is contained in:
Lars Seipel 2021-12-23 17:37:27 +01:00 committed by GitHub
parent b3ec974cfc
commit ac1a703731
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 1 deletions

View File

@ -777,12 +777,15 @@ func Volumes() []string {
func mkdirAllWithPermissions(path string, mode os.FileMode, uid, gid int64) error {
// Check if a file already exists on the path, if yes then delete it
info, err := os.Stat(path)
if !os.IsNotExist(err) && !info.IsDir() {
if err == nil && !info.IsDir() {
logrus.Tracef("removing file because it needs to be a directory %s", path)
if err := os.Remove(path); err != nil {
return errors.Wrapf(err, "error removing %s to make way for new directory.", path)
}
}
if err != nil && !os.IsNotExist(err) {
return errors.Wrapf(err, "error calling stat on %s.", path)
}
if err := os.MkdirAll(path, mode); err != nil {
return err