Skip to content

Commit

Permalink
fix termination (#95)
Browse files Browse the repository at this point in the history
  • Loading branch information
noboruma authored Jul 2, 2024
1 parent 1c106bf commit 81ba711
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
18 changes: 13 additions & 5 deletions pkg/runner/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"strconv"
"sync/atomic"
"time"

"github.com/deepfence/YaraHunter/constants"
Expand All @@ -12,14 +13,15 @@ import (
"github.com/deepfence/YaraHunter/pkg/scan"
"github.com/deepfence/YaraHunter/pkg/server"
"github.com/deepfence/YaraHunter/pkg/yararules"
"github.com/deepfence/golang_deepfence_sdk/utils/tasks"
cfg "github.com/deepfence/match-scanner/pkg/config"
log "github.com/sirupsen/logrus"
)

func StartYaraHunter(ctx context.Context, opts *config.Options, config cfg.Config) {

if *opts.SocketPath == "" {
runOnce(opts, config)
runOnce(ctx, opts, config)
return
}

Expand All @@ -32,7 +34,7 @@ func StartYaraHunter(ctx context.Context, opts *config.Options, config cfg.Confi
<-ctx.Done()
}

func runOnce(opts *config.Options, extractorConfig cfg.Config) {
func runOnce(ctx context.Context, opts *config.Options, extractorConfig cfg.Config) {
var results IOCWriter

yaraRules := yararules.New(*opts.RulesPath)
Expand All @@ -55,26 +57,32 @@ func runOnce(opts *config.Options, extractorConfig cfg.Config) {
outputs = append(outputs, res)
}

scanCtx := tasks.ScanContext{
Res: nil,
IsAlive: atomic.Bool{},
Context: ctx,
}

var st scan.ScanType
nodeID := ""
switch {
case len(*opts.Local) > 0:
st = scan.DirScan
nodeID = *opts.Local
log.Infof("scan for malwares in path %s", nodeID)
err = scanner.Scan(nil, st, "", *opts.Local, "", writeToArray)
err = scanner.Scan(&scanCtx, st, "", *opts.Local, "", writeToArray)
results = &output.JSONDirIOCOutput{DirName: nodeID, IOC: removeDuplicateIOCs(outputs)}
case len(*opts.ImageName) > 0:
st = scan.ImageScan
nodeID = *opts.ImageName
log.Infof("Scanning image %s for IOC...", nodeID)
err = scanner.Scan(nil, st, "", *opts.ImageName, "", writeToArray)
err = scanner.Scan(&scanCtx, st, "", *opts.ImageName, "", writeToArray)
results = &output.JSONImageIOCOutput{ImageID: nodeID, IOC: removeDuplicateIOCs(outputs)}
case len(*opts.ContainerID) > 0:
st = scan.ContainerScan
nodeID = *opts.ContainerID
log.Infof("scan for malwares in container %s", nodeID)
err = scanner.Scan(nil, st, "", nodeID, "", writeToArray)
err = scanner.Scan(&scanCtx, st, "", nodeID, "", writeToArray)
results = &output.JSONImageIOCOutput{ContainerID: nodeID, IOC: removeDuplicateIOCs(outputs)}
default:
err = fmt.Errorf("invalid request")
Expand Down
3 changes: 1 addition & 2 deletions pkg/scan/scanner.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package scan

import (
"context"
"fmt"
"os"
"sync"
Expand Down Expand Up @@ -107,7 +106,7 @@ func (s *Scanner) Scan(ctx *tasks.ScanContext, stype ScanType, namespace, id str
}
}()

genscan.ApplyScan(context.Background(), extract, func(f extractor.ExtractedFile) {
genscan.ApplyScan(ctx.Context, extract, func(f extractor.ExtractedFile) {
if ctx != nil {
err := ctx.Checkpoint("scan_phase")
if err != nil {
Expand Down

0 comments on commit 81ba711

Please sign in to comment.