mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	
							
								
								
									
										32
									
								
								vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -177,7 +177,7 @@ func allowAllDevices() []systemdDbus.Property {
 | 
			
		||||
 | 
			
		||||
// generateDeviceProperties takes the configured device rules and generates a
 | 
			
		||||
// corresponding set of systemd properties to configure the devices correctly.
 | 
			
		||||
func generateDeviceProperties(r *configs.Resources) ([]systemdDbus.Property, error) {
 | 
			
		||||
func generateDeviceProperties(r *configs.Resources, sdVer int) ([]systemdDbus.Property, error) {
 | 
			
		||||
	if r.SkipDevices {
 | 
			
		||||
		return nil, nil
 | 
			
		||||
	}
 | 
			
		||||
@@ -238,9 +238,10 @@ func generateDeviceProperties(r *configs.Resources) ([]systemdDbus.Property, err
 | 
			
		||||
		// trickery to convert things:
 | 
			
		||||
		//
 | 
			
		||||
		//  * Concrete rules with non-wildcard major/minor numbers have to use
 | 
			
		||||
		//    /dev/{block,char} paths. This is slightly odd because it means
 | 
			
		||||
		//    that we cannot add whitelist rules for devices that don't exist,
 | 
			
		||||
		//    but there's not too much we can do about that.
 | 
			
		||||
		//    /dev/{block,char}/MAJOR:minor paths. Before v240, systemd uses
 | 
			
		||||
		//    stat(2) on such paths to look up device properties, meaning we
 | 
			
		||||
		//    cannot add whitelist rules for devices that don't exist. Since v240,
 | 
			
		||||
		//    device properties are parsed from the path string.
 | 
			
		||||
		//
 | 
			
		||||
		//    However, path globbing is not support for path-based rules so we
 | 
			
		||||
		//    need to handle wildcards in some other manner.
 | 
			
		||||
@@ -288,21 +289,14 @@ func generateDeviceProperties(r *configs.Resources) ([]systemdDbus.Property, err
 | 
			
		||||
			case devices.CharDevice:
 | 
			
		||||
				entry.Path = fmt.Sprintf("/dev/char/%d:%d", rule.Major, rule.Minor)
 | 
			
		||||
			}
 | 
			
		||||
			// systemd will issue a warning if the path we give here doesn't exist.
 | 
			
		||||
			// Since all of this logic is best-effort anyway (we manually set these
 | 
			
		||||
			// rules separately to systemd) we can safely skip entries that don't
 | 
			
		||||
			// have a corresponding path.
 | 
			
		||||
			if _, err := os.Stat(entry.Path); err != nil {
 | 
			
		||||
				// Also check /sys/dev so that we don't depend on /dev/{block,char}
 | 
			
		||||
				// being populated. (/dev/{block,char} is populated by udev, which
 | 
			
		||||
				// isn't strictly required for systemd). Ironically, this happens most
 | 
			
		||||
				// easily when starting containerd within a runc created container
 | 
			
		||||
				// itself.
 | 
			
		||||
 | 
			
		||||
				// We don't bother with securejoin here because we create entry.Path
 | 
			
		||||
				// right above here, so we know it's safe.
 | 
			
		||||
				if _, err := os.Stat("/sys" + entry.Path); err != nil {
 | 
			
		||||
					logrus.Warnf("skipping device %s for systemd: %s", entry.Path, err)
 | 
			
		||||
			if sdVer < 240 {
 | 
			
		||||
				// Old systemd versions use stat(2) on path to find out device major:minor
 | 
			
		||||
				// numbers and type. If the path doesn't exist, it will not add the rule,
 | 
			
		||||
				// emitting a warning instead.
 | 
			
		||||
				// Since all of this logic is best-effort anyway (we manually set these
 | 
			
		||||
				// rules separately to systemd) we can safely skip entries that don't
 | 
			
		||||
				// have a corresponding path.
 | 
			
		||||
				if _, err := os.Stat(entry.Path); err != nil {
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -77,7 +77,7 @@ var legacySubsystems = []subsystem{
 | 
			
		||||
func genV1ResourcesProperties(r *configs.Resources, cm *dbusConnManager) ([]systemdDbus.Property, error) {
 | 
			
		||||
	var properties []systemdDbus.Property
 | 
			
		||||
 | 
			
		||||
	deviceProperties, err := generateDeviceProperties(r)
 | 
			
		||||
	deviceProperties, err := generateDeviceProperties(r, systemdVersion(cm))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -182,7 +182,7 @@ func genV2ResourcesProperties(r *configs.Resources, cm *dbusConnManager) ([]syst
 | 
			
		||||
	//       aren't the end of the world, but it is a bit concerning. However
 | 
			
		||||
	//       it's unclear if systemd removes all eBPF programs attached when
 | 
			
		||||
	//       doing SetUnitProperties...
 | 
			
		||||
	deviceProperties, err := generateDeviceProperties(r)
 | 
			
		||||
	deviceProperties, err := generateDeviceProperties(r, systemdVersion(cm))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user