go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/kernel/modules.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package kernel 5 6 import ( 7 "bufio" 8 "io" 9 "regexp" 10 "strings" 11 ) 12 13 func ParseLsmod(r io.Reader) []*KernelModule { 14 res := []*KernelModule{} 15 16 lsmodEntry := regexp.MustCompile(`^(\S+)\s+(\S+)\s+(\S+)\s*(\S*)$`) 17 18 scanner := bufio.NewScanner(r) 19 for scanner.Scan() { 20 line := scanner.Text() 21 m := lsmodEntry.FindStringSubmatch(line) 22 if len(m) == 5 { 23 if m[1] == "Module" { 24 continue 25 } 26 27 res = append(res, &KernelModule{ 28 Name: strings.TrimSpace(m[1]), 29 Size: strings.TrimSpace(m[2]), 30 UsedBy: strings.TrimSpace(m[3]), 31 }) 32 } 33 } 34 35 return res 36 } 37 38 func ParseLinuxProcModules(r io.Reader) []*KernelModule { 39 res := []*KernelModule{} 40 41 procModulesEntry := regexp.MustCompile(`^(\S+)\s(\S+)\s(\S+)\s(.*)$`) 42 43 scanner := bufio.NewScanner(r) 44 for scanner.Scan() { 45 line := scanner.Text() 46 m := procModulesEntry.FindStringSubmatch(line) 47 if len(m) == 5 { 48 res = append(res, &KernelModule{ 49 Name: strings.TrimSpace(m[1]), 50 Size: strings.TrimSpace(m[2]), 51 UsedBy: strings.TrimSpace(m[3]), 52 }) 53 } 54 } 55 56 return res 57 } 58 59 func ParseKldstat(r io.Reader) []*KernelModule { 60 res := []*KernelModule{} 61 62 lsmodEntry := regexp.MustCompile(`^\s+(\S+)\s+(\S+)\s+(\S+)\s*(\S*)\s*(\S*)$`) 63 64 scanner := bufio.NewScanner(r) 65 for scanner.Scan() { 66 line := scanner.Text() 67 m := lsmodEntry.FindStringSubmatch(line) 68 if len(m) == 6 { 69 res = append(res, &KernelModule{ 70 Name: strings.TrimSpace(m[5]), 71 Size: strings.TrimSpace(m[4]), 72 UsedBy: strings.TrimSpace(m[2]), 73 }) 74 } 75 } 76 77 return res 78 } 79 80 func ParseKextstat(r io.Reader) []*KernelModule { 81 res := []*KernelModule{} 82 83 lsmodEntry := regexp.MustCompile(`^\s+(\S+)\s+(\S+)\s+(\S+)\s*(\S*)\s*(\S*)\s*(\S*)`) 84 85 scanner := bufio.NewScanner(r) 86 for scanner.Scan() { 87 line := scanner.Text() 88 m := lsmodEntry.FindStringSubmatch(line) 89 if len(m) == 7 { 90 res = append(res, &KernelModule{ 91 Name: strings.TrimSpace(m[6]), 92 Size: strings.TrimSpace(m[4]), 93 UsedBy: strings.TrimSpace(m[2]), 94 }) 95 } 96 } 97 98 return res 99 }