diff --git a/intel/module.go b/intel/module.go index 81f3efc5..ceec6b64 100644 --- a/intel/module.go +++ b/intel/module.go @@ -9,5 +9,5 @@ import ( var Module *modules.Module func init() { - Module = modules.Register("intel", nil, nil, nil, "geoip", "filterlists") + Module = modules.Register("intel", nil, nil, nil, "geoip", "filterlists", "customlists") } diff --git a/process/database.go b/process/database.go index b457d069..4def9b01 100644 --- a/process/database.go +++ b/process/database.go @@ -59,7 +59,7 @@ func (p *Process) Save() { // save processesLock.Lock() - processes[p.key] = p + processes[p.processKey] = p processesLock.Unlock() } @@ -75,7 +75,7 @@ func (p *Process) Delete() { // delete from internal storage processesLock.Lock() - delete(processes, p.key) + delete(processes, p.processKey) processesLock.Unlock() // propagate delete diff --git a/process/process.go b/process/process.go index 777a6aa9..f7d12973 100644 --- a/process/process.go +++ b/process/process.go @@ -46,7 +46,7 @@ type Process struct { Env map[string]string // unique process identifier ("Pid-CreatedAt") - key string + processKey string // Profile attributes. // Once set, these don't change; safe for concurrent access. @@ -160,6 +160,16 @@ func (p *Process) String() string { func GetOrFindProcess(ctx context.Context, pid int) (*Process, error) { log.Tracer(ctx).Tracef("process: getting process for PID %d", pid) + // Check for special processes + switch pid { + case UnidentifiedProcessID: + return GetUnidentifiedProcess(ctx), nil + case UnsolicitedProcessID: + return GetUnsolicitedProcess(ctx), nil + case SystemProcessID: + return GetSystemProcess(ctx), nil + } + // Get pid and created time for identification. pInfo, err := processInfo.NewProcessWithContext(ctx, int32(pid)) if err != nil { @@ -187,29 +197,20 @@ func GetOrFindProcess(ctx context.Context, pid int) (*Process, error) { } func loadProcess(ctx context.Context, key string, pInfo *processInfo.Process) (*Process, error) { - switch pInfo.Pid { - case UnidentifiedProcessID: - return GetUnidentifiedProcess(ctx), nil - case UnsolicitedProcessID: - return GetUnsolicitedProcess(ctx), nil - case SystemProcessID: - return GetSystemProcess(ctx), nil - } - // Get created time of process. The value should be cached. createdAt, _ := pInfo.CreateTimeWithContext(ctx) - process, ok := GetProcessFromStorage(getProcessKey(pInfo.Pid, createdAt)) + process, ok := GetProcessFromStorage(key) if ok { return process, nil } // Create new a process object. process = &Process{ - Pid: int(pInfo.Pid), - CreatedAt: createdAt, - FirstSeen: time.Now().Unix(), - key: key, + Pid: int(pInfo.Pid), + CreatedAt: createdAt, + FirstSeen: time.Now().Unix(), + processKey: key, } // Get process information from the system. @@ -246,7 +247,12 @@ func loadProcess(ctx context.Context, key string, pInfo *processInfo.Process) (* process.ParentPid = int(ppid) // Parent created at time - parentCreatedAt, err := pInfo.CreateTimeWithContext(ctx) + parentPInfo, err := processInfo.NewProcessWithContext(ctx, ppid) + if err != nil { + return nil, err + } + + parentCreatedAt, err := parentPInfo.CreateTimeWithContext(ctx) if err != nil { return nil, err } diff --git a/process/special.go b/process/special.go index 6ecd2d0b..93f17c9a 100644 --- a/process/special.go +++ b/process/special.go @@ -88,9 +88,9 @@ func GetSystemProcess(ctx context.Context) *Process { } func getSpecialProcess(ctx context.Context, template *Process) *Process { - p, _, _ := getSpecialProcessSingleInflight.Do(template.key, func() (interface{}, error) { + p, _, _ := getSpecialProcessSingleInflight.Do(template.processKey, func() (interface{}, error) { // Check if we have already loaded the special process. - process, ok := GetProcessFromStorage(template.key) + process, ok := GetProcessFromStorage(template.processKey) if ok { return process, nil }