github.com/opencontainers/runc@v1.2.0-rc.1.0.20240520010911-492dc558cdd6/libcontainer/system/kernelparam/lookup.go (about) 1 package kernelparam 2 3 import ( 4 "io/fs" 5 "strings" 6 ) 7 8 func runeFilter(c rune) bool { 9 return c < '!' || c > '~' 10 } 11 12 // LookupKernelBootParameters returns the selected kernel parameters specified 13 // in the kernel command line. The parameters are returned as a map of key-value pairs. 14 func LookupKernelBootParameters(rootFS fs.FS, lookupParameters ...string) (map[string]string, error) { 15 cmdline, err := fs.ReadFile(rootFS, "proc/cmdline") 16 if err != nil { 17 return nil, err 18 } 19 20 kernelParameters := make(map[string]string) 21 remaining := len(lookupParameters) 22 23 for _, parameter := range strings.FieldsFunc(string(cmdline), runeFilter) { 24 if remaining == 0 { 25 break 26 } 27 idx := strings.IndexByte(parameter, '=') 28 if idx == -1 { 29 continue 30 } 31 for _, lookupParam := range lookupParameters { 32 if lookupParam == parameter[:idx] { 33 kernelParameters[lookupParam] = parameter[idx+1:] 34 remaining-- 35 break 36 } 37 } 38 } 39 40 return kernelParameters, nil 41 }