diff --git a/internal/bootstrap/bootstrap.go b/internal/bootstrap/bootstrap.go index ead9fb3e5..1e5a52361 100644 --- a/internal/bootstrap/bootstrap.go +++ b/internal/bootstrap/bootstrap.go @@ -142,6 +142,9 @@ func NewApp(cfg *config.Config, options ...Option) (*App, error) { var engine *rules.Engine var rs *config.RulesCompileResult + signature.InitStore() + fs.InitMetadataStore() + if cfg.Filters.Rules.Enabled && !cfg.ForwardMode && !cfg.IsCaptureSet() && !cfg.IsFilamentSet() { engine = rules.NewEngine(psnap, cfg) var err error diff --git a/pkg/fs/file.go b/pkg/fs/file.go index e766e2f99..d8dfb19b1 100644 --- a/pkg/fs/file.go +++ b/pkg/fs/file.go @@ -155,6 +155,12 @@ func GetMetadataStore() *FileMetadataStore { return metadataStore } +func InitMetadataStore() { + onceMetadataStore.Do(func() { + metadataStore = newFileMetadataStore() + }) +} + // FileMetadataStore contains metainfo of PE files derived // from file creation or DLL loading. Metadata store is // invalidated on various signals such as file overwriting diff --git a/pkg/util/signature/signature.go b/pkg/util/signature/signature.go index 6dae675fa..5df5ddb8b 100644 --- a/pkg/util/signature/signature.go +++ b/pkg/util/signature/signature.go @@ -140,6 +140,13 @@ func GetSignatures() *Signatures { return sigs } +// InitStore eagerly initializes the signature store and its worker pool. +func InitStore() { + once.Do(func() { + sigs = newSignatures() + }) +} + func newSignatures() *Signatures { sigs = &Signatures{ signatures: make(map[Key]*Signature, 512),