Clean up linter errors
This commit is contained in:
@@ -24,8 +24,7 @@ var (
|
||||
dbController *database.Controller
|
||||
dbControllerFlag = abool.NewBool(false)
|
||||
|
||||
deleteProcessesThreshold = 15 * time.Minute
|
||||
lastEstablishedUpdateThreshold = 30 * time.Second
|
||||
deleteProcessesThreshold = 15 * time.Minute
|
||||
)
|
||||
|
||||
// GetProcessFromStorage returns a process from the internal storage.
|
||||
|
||||
@@ -33,16 +33,14 @@ func (p *Process) FindProfiles(ctx context.Context) error {
|
||||
}
|
||||
|
||||
var userProfile *profile.Profile
|
||||
for r := range it.Next {
|
||||
it.Cancel()
|
||||
userProfile, err = profile.EnsureProfile(r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
break
|
||||
}
|
||||
if it.Err() != nil {
|
||||
return it.Err()
|
||||
// get first result
|
||||
r := <-it.Next
|
||||
// cancel immediately
|
||||
it.Cancel()
|
||||
// ensure its a profile
|
||||
userProfile, err = profile.EnsureProfile(r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// create new profile if it does not exist.
|
||||
@@ -54,7 +52,7 @@ func (p *Process) FindProfiles(ctx context.Context) error {
|
||||
}
|
||||
|
||||
if userProfile.MarkUsed() {
|
||||
userProfile.Save(profile.UserNamespace)
|
||||
_ = userProfile.Save(profile.UserNamespace)
|
||||
}
|
||||
|
||||
// Stamp
|
||||
@@ -74,17 +72,7 @@ func (p *Process) FindProfiles(ctx context.Context) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func selectProfile(p *Process, profs []*profile.Profile) (selectedProfile *profile.Profile) {
|
||||
var highestScore int
|
||||
for _, prof := range profs {
|
||||
score := matchProfile(p, prof)
|
||||
if score > highestScore {
|
||||
selectedProfile = prof
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//nolint:deadcode,unused // FIXME
|
||||
func matchProfile(p *Process, prof *profile.Profile) (score int) {
|
||||
for _, fp := range prof.Fingerprints {
|
||||
score += matchFingerprint(p, fp)
|
||||
@@ -92,6 +80,7 @@ func matchProfile(p *Process, prof *profile.Profile) (score int) {
|
||||
return
|
||||
}
|
||||
|
||||
//nolint:deadcode,unused // FIXME
|
||||
func matchFingerprint(p *Process, fp *profile.Fingerprint) (score int) {
|
||||
if !fp.MatchesOS() {
|
||||
return 0
|
||||
@@ -100,8 +89,8 @@ func matchFingerprint(p *Process, fp *profile.Fingerprint) (score int) {
|
||||
switch fp.Type {
|
||||
case "full_path":
|
||||
if p.Path == fp.Value {
|
||||
return profile.GetFingerprintWeight(fp.Type)
|
||||
}
|
||||
return profile.GetFingerprintWeight(fp.Type)
|
||||
case "partial_path":
|
||||
// FIXME: if full_path matches, do not match partial paths
|
||||
return profile.GetFingerprintWeight(fp.Type)
|
||||
|
||||
@@ -155,7 +155,7 @@ func readDirNames(dir string) (names []string) {
|
||||
defer file.Close()
|
||||
names, err = file.Readdirnames(0)
|
||||
if err != nil {
|
||||
log.Warningf("process: could not get entries from direcotry %s: %s", dir, err)
|
||||
log.Warningf("process: could not get entries from directory %s: %s", dir, err)
|
||||
return []string{}
|
||||
}
|
||||
return
|
||||
|
||||
@@ -47,19 +47,6 @@ const (
|
||||
UDP6Data = "/proc/net/udp6"
|
||||
ICMP4Data = "/proc/net/icmp"
|
||||
ICMP6Data = "/proc/net/icmp6"
|
||||
|
||||
TCP_ESTABLISHED = iota + 1
|
||||
TCP_SYN_SENT
|
||||
TCP_SYN_RECV
|
||||
TCP_FIN_WAIT1
|
||||
TCP_FIN_WAIT2
|
||||
TCP_TIME_WAIT
|
||||
TCP_CLOSE
|
||||
TCP_CLOSE_WAIT
|
||||
TCP_LAST_ACK
|
||||
TCP_LISTEN
|
||||
TCP_CLOSING
|
||||
TCP_NEW_SYN_RECV
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
dupReqMap = make(map[int]*sync.Mutex)
|
||||
dupReqMap = make(map[int]*sync.WaitGroup)
|
||||
dupReqLock sync.Mutex
|
||||
)
|
||||
|
||||
@@ -61,7 +61,7 @@ func (p *Process) ProfileSet() *profile.Set {
|
||||
return p.profileSet
|
||||
}
|
||||
|
||||
// Strings returns a string represenation of process.
|
||||
// Strings returns a string representation of process.
|
||||
func (p *Process) String() string {
|
||||
p.Lock()
|
||||
defer p.Unlock()
|
||||
@@ -79,7 +79,7 @@ func (p *Process) AddCommunication() {
|
||||
|
||||
// check if we should save
|
||||
save := false
|
||||
if p.LastCommEstablished < time.Now().Add(-3*time.Second).Unix() {
|
||||
if p.LastCommEstablished == 0 || p.LastCommEstablished < time.Now().Add(-3*time.Second).Unix() {
|
||||
save = true
|
||||
}
|
||||
|
||||
@@ -206,6 +206,43 @@ func GetOrFindProcess(ctx context.Context, pid int) (*Process, error) {
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func deduplicateRequest(ctx context.Context, pid int) (finishRequest func()) {
|
||||
dupReqLock.Lock()
|
||||
defer dupReqLock.Unlock()
|
||||
|
||||
// get duplicate request waitgroup
|
||||
wg, requestActive := dupReqMap[pid]
|
||||
|
||||
// someone else is already on it!
|
||||
if requestActive {
|
||||
// log that we are waiting
|
||||
log.Tracer(ctx).Tracef("intel: waiting for duplicate request for PID %d to complete", pid)
|
||||
// wait
|
||||
wg.Wait()
|
||||
// done!
|
||||
return nil
|
||||
}
|
||||
|
||||
// we are currently the only one doing a request for this
|
||||
|
||||
// create new waitgroup
|
||||
wg = new(sync.WaitGroup)
|
||||
// add worker (us!)
|
||||
wg.Add(1)
|
||||
// add to registry
|
||||
dupReqMap[pid] = wg
|
||||
|
||||
// return function to mark request as finished
|
||||
return func() {
|
||||
dupReqLock.Lock()
|
||||
defer dupReqLock.Unlock()
|
||||
// mark request as done
|
||||
wg.Done()
|
||||
// delete from registry
|
||||
delete(dupReqMap, pid)
|
||||
}
|
||||
}
|
||||
|
||||
func loadProcess(ctx context.Context, pid int) (*Process, error) {
|
||||
if pid == -1 {
|
||||
return UnknownProcess, nil
|
||||
@@ -219,35 +256,20 @@ func loadProcess(ctx context.Context, pid int) (*Process, error) {
|
||||
return process, nil
|
||||
}
|
||||
|
||||
// dedup requests
|
||||
dupReqLock.Lock()
|
||||
mutex, requestActive := dupReqMap[pid]
|
||||
if !requestActive {
|
||||
mutex = new(sync.Mutex)
|
||||
mutex.Lock()
|
||||
dupReqMap[pid] = mutex
|
||||
dupReqLock.Unlock()
|
||||
} else {
|
||||
dupReqLock.Unlock()
|
||||
log.Tracer(ctx).Tracef("process: waiting for duplicate request for PID %d to complete", pid)
|
||||
mutex.Lock()
|
||||
// wait until duplicate request is finished, then fetch current Process and return
|
||||
mutex.Unlock()
|
||||
// dedupe!
|
||||
markRequestFinished := deduplicateRequest(ctx, pid)
|
||||
if markRequestFinished == nil {
|
||||
// we waited for another request, recheck the storage!
|
||||
process, ok = GetProcessFromStorage(pid)
|
||||
if ok {
|
||||
return process, nil
|
||||
}
|
||||
return nil, fmt.Errorf("previous request for process with PID %d failed", pid)
|
||||
// if cache is still empty, go ahead
|
||||
} else {
|
||||
// we are the first!
|
||||
defer markRequestFinished()
|
||||
}
|
||||
|
||||
// lock request for this pid
|
||||
defer func() {
|
||||
dupReqLock.Lock()
|
||||
delete(dupReqMap, pid)
|
||||
dupReqLock.Unlock()
|
||||
mutex.Unlock()
|
||||
}()
|
||||
|
||||
// create new process
|
||||
new := &Process{
|
||||
Pid: pid,
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
package process
|
||||
|
||||
// IsUser returns whether the process is run by a normal user.
|
||||
func (m *Process) IsUser() bool {
|
||||
return m.UserID >= 1000
|
||||
func (p *Process) IsUser() bool {
|
||||
return p.UserID >= 1000
|
||||
}
|
||||
|
||||
// IsAdmin returns whether the process is run by an admin user.
|
||||
func (m *Process) IsAdmin() bool {
|
||||
return m.UserID >= 0
|
||||
func (p *Process) IsAdmin() bool {
|
||||
return p.UserID >= 0
|
||||
}
|
||||
|
||||
// IsSystem returns whether the process is run by the operating system.
|
||||
func (m *Process) IsSystem() bool {
|
||||
return m.UserID == 0
|
||||
func (p *Process) IsSystem() bool {
|
||||
return p.UserID == 0
|
||||
}
|
||||
|
||||
// IsKernel returns whether the process is the Kernel.
|
||||
func (m *Process) IsKernel() bool {
|
||||
return m.Pid == 0
|
||||
func (p *Process) IsKernel() bool {
|
||||
return p.Pid == 0
|
||||
}
|
||||
|
||||
// specialOSInit does special OS specific Process initialization.
|
||||
func (m *Process) specialOSInit() {
|
||||
func (p *Process) specialOSInit() {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user