Skip to content

Commit

Permalink
Merge pull request openshift#107 from vishh/dev_null
Browse files Browse the repository at this point in the history
Reopening stdin, stdout and stderr if they are pointing to /dev/null.
  • Loading branch information
Michael Crosby committed Jul 21, 2014
2 parents 00c55b3 + c4f66a1 commit 47d9567
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions mount/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,17 @@ func InitializeMountNamespace(rootfs, console string, sysReadonly bool, mountCon
if err := SetupPtmx(rootfs, console, mountConfig.MountLabel); err != nil {
return err
}

// stdin, stdout and stderr could be pointing to /dev/null from parent namespace.
// Re-open them inside this namespace.
if err := reOpenDevNull(rootfs); err != nil {
return fmt.Errorf("Failed to reopen /dev/null %s", err)
}

if err := setupDevSymlinks(rootfs); err != nil {
return fmt.Errorf("dev symlinks %s", err)
}

if err := syscall.Chdir(rootfs); err != nil {
return fmt.Errorf("chdir into %s %s", rootfs, err)
}
Expand Down Expand Up @@ -208,3 +216,29 @@ func newSystemMounts(rootfs, mountLabel string, sysReadonly bool, mounts Mounts)

return systemMounts
}

// Is stdin, stdout or stderr were to be pointing to '/dev/null',
// this method will make them point to '/dev/null' from within this namespace.
func reOpenDevNull(rootfs string) error {
var stat, devNullStat syscall.Stat_t
file, err := os.Open(filepath.Join(rootfs, "/dev/null"))
if err != nil {
return fmt.Errorf("Failed to open /dev/null - %s", err)
}
defer file.Close()
if err = syscall.Fstat(int(file.Fd()), &devNullStat); err != nil {
return fmt.Errorf("Failed to stat /dev/null - %s", err)
}
for fd := 0; fd < 3; fd++ {
if err = syscall.Fstat(fd, &stat); err != nil {
return fmt.Errorf("Failed to stat fd %d - %s", fd, err)
}
if stat.Rdev == devNullStat.Rdev {
// Close and re-open the fd.
if err = syscall.Dup2(int(file.Fd()), fd); err != nil {
return fmt.Errorf("Failed to dup fd %d to fd %d - %s", file.Fd(), fd)
}
}
}
return nil
}

0 comments on commit 47d9567

Please sign in to comment.