abi: set default umask and rlimits
the code got lost in the migration to podman 2.0, reintroduce it. Closes: https://github.com/containers/podman/issues/6989 Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
		
							parent
							
								
									dfca83d37c
								
							
						
					
					
						commit
						65d382dc68
					
				| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
	"syscall"
 | 
			
		||||
 | 
			
		||||
	"github.com/containers/libpod/v2/libpod/define"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setRLimits() error {
 | 
			
		||||
	rlimits := new(syscall.Rlimit)
 | 
			
		||||
	rlimits.Cur = define.RLimitDefaultValue
 | 
			
		||||
	rlimits.Max = define.RLimitDefaultValue
 | 
			
		||||
	if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
 | 
			
		||||
		if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
 | 
			
		||||
			return errors.Wrapf(err, "error getting rlimits")
 | 
			
		||||
		}
 | 
			
		||||
		rlimits.Cur = rlimits.Max
 | 
			
		||||
		if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
 | 
			
		||||
			return errors.Wrapf(err, "error setting new rlimits")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setUMask() {
 | 
			
		||||
	// Be sure we can create directories with 0755 mode.
 | 
			
		||||
	syscall.Umask(0022)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func earlyInitHook() {
 | 
			
		||||
	if err := setRLimits(); err != nil {
 | 
			
		||||
		fmt.Fprint(os.Stderr, "Failed to set rlimits: "+err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	setUMask()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
// +build !linux
 | 
			
		||||
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
func earlyInitHook() {
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -77,6 +77,7 @@ func init() {
 | 
			
		|||
	cobra.OnInitialize(
 | 
			
		||||
		loggingHook,
 | 
			
		||||
		syslogHook,
 | 
			
		||||
		earlyInitHook,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	rootFlags(rootCmd, registry.PodmanConfig())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,3 +82,6 @@ const (
 | 
			
		|||
	SdNotifyModeConmon    = "conmon"
 | 
			
		||||
	SdNotifyModeIgnore    = "ignore"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// DefaultRlimitValue is the value set by default for nofile and nproc
 | 
			
		||||
const RLimitDefaultValue = uint64(1048576)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,6 @@ import (
 | 
			
		|||
	"os/exec"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"syscall"
 | 
			
		||||
 | 
			
		||||
	"github.com/containers/common/pkg/config"
 | 
			
		||||
	"github.com/containers/libpod/v2/libpod/define"
 | 
			
		||||
| 
						 | 
				
			
			@ -146,27 +145,6 @@ func movePauseProcessToScope() error {
 | 
			
		|||
	return utils.RunUnderSystemdScope(int(pid), "user.slice", "podman-pause.scope")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setRLimits() error { // nolint:deadcode,unused
 | 
			
		||||
	rlimits := new(syscall.Rlimit)
 | 
			
		||||
	rlimits.Cur = 1048576
 | 
			
		||||
	rlimits.Max = 1048576
 | 
			
		||||
	if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
 | 
			
		||||
		if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
 | 
			
		||||
			return errors.Wrapf(err, "error getting rlimits")
 | 
			
		||||
		}
 | 
			
		||||
		rlimits.Cur = rlimits.Max
 | 
			
		||||
		if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
 | 
			
		||||
			return errors.Wrapf(err, "error setting new rlimits")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setUMask() { // nolint:deadcode,unused
 | 
			
		||||
	// Be sure we can create directories with 0755 mode.
 | 
			
		||||
	syscall.Umask(0022)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// checkInput can be used to verify any of the globalopt values
 | 
			
		||||
func checkInput() error { // nolint:deadcode,unused
 | 
			
		||||
	return nil
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -505,10 +505,9 @@ func BlockAccessToKernelFilesystems(privileged, pidModeIsHost bool, g *generate.
 | 
			
		|||
 | 
			
		||||
func addRlimits(config *CreateConfig, g *generate.Generator) error {
 | 
			
		||||
	var (
 | 
			
		||||
		kernelMax  uint64 = 1048576
 | 
			
		||||
		isRootless        = rootless.IsRootless()
 | 
			
		||||
		nofileSet         = false
 | 
			
		||||
		nprocSet          = false
 | 
			
		||||
		isRootless = rootless.IsRootless()
 | 
			
		||||
		nofileSet  = false
 | 
			
		||||
		nprocSet   = false
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	for _, u := range config.Resources.Ulimit {
 | 
			
		||||
| 
						 | 
				
			
			@ -538,8 +537,8 @@ func addRlimits(config *CreateConfig, g *generate.Generator) error {
 | 
			
		|||
	// files and number of processes to the maximum they can be set to
 | 
			
		||||
	// (without overriding a sysctl)
 | 
			
		||||
	if !nofileSet {
 | 
			
		||||
		max := kernelMax
 | 
			
		||||
		current := kernelMax
 | 
			
		||||
		max := define.RLimitDefaultValue
 | 
			
		||||
		current := define.RLimitDefaultValue
 | 
			
		||||
		if isRootless {
 | 
			
		||||
			var rlimit unix.Rlimit
 | 
			
		||||
			if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -555,8 +554,8 @@ func addRlimits(config *CreateConfig, g *generate.Generator) error {
 | 
			
		|||
		g.AddProcessRlimits("RLIMIT_NOFILE", max, current)
 | 
			
		||||
	}
 | 
			
		||||
	if !nprocSet {
 | 
			
		||||
		max := kernelMax
 | 
			
		||||
		current := kernelMax
 | 
			
		||||
		max := define.RLimitDefaultValue
 | 
			
		||||
		current := define.RLimitDefaultValue
 | 
			
		||||
		if isRootless {
 | 
			
		||||
			var rlimit unix.Rlimit
 | 
			
		||||
			if err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlimit); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,10 +20,9 @@ import (
 | 
			
		|||
 | 
			
		||||
func addRlimits(s *specgen.SpecGenerator, g *generate.Generator) error {
 | 
			
		||||
	var (
 | 
			
		||||
		kernelMax  uint64 = 1048576
 | 
			
		||||
		isRootless        = rootless.IsRootless()
 | 
			
		||||
		nofileSet         = false
 | 
			
		||||
		nprocSet          = false
 | 
			
		||||
		isRootless = rootless.IsRootless()
 | 
			
		||||
		nofileSet  = false
 | 
			
		||||
		nprocSet   = false
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	if s.Rlimits == nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -45,8 +44,8 @@ func addRlimits(s *specgen.SpecGenerator, g *generate.Generator) error {
 | 
			
		|||
	// files and number of processes to the maximum they can be set to
 | 
			
		||||
	// (without overriding a sysctl)
 | 
			
		||||
	if !nofileSet {
 | 
			
		||||
		max := kernelMax
 | 
			
		||||
		current := kernelMax
 | 
			
		||||
		max := define.RLimitDefaultValue
 | 
			
		||||
		current := define.RLimitDefaultValue
 | 
			
		||||
		if isRootless {
 | 
			
		||||
			var rlimit unix.Rlimit
 | 
			
		||||
			if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -62,8 +61,8 @@ func addRlimits(s *specgen.SpecGenerator, g *generate.Generator) error {
 | 
			
		|||
		g.AddProcessRlimits("RLIMIT_NOFILE", max, current)
 | 
			
		||||
	}
 | 
			
		||||
	if !nprocSet {
 | 
			
		||||
		max := kernelMax
 | 
			
		||||
		current := kernelMax
 | 
			
		||||
		max := define.RLimitDefaultValue
 | 
			
		||||
		current := define.RLimitDefaultValue
 | 
			
		||||
		if isRootless {
 | 
			
		||||
			var rlimit unix.Rlimit
 | 
			
		||||
			if err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlimit); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue