diff --git a/modules/hid/hid.go b/modules/hid/hid.go index f0f30af3..7bf8f8da 100644 --- a/modules/hid/hid.go +++ b/modules/hid/hid.go @@ -23,6 +23,7 @@ type HIDRecon struct { lastPing time.Time useLNA bool sniffLock *sync.Mutex + writeLock *sync.Mutex sniffAddrRaw []byte sniffAddr string pingPayload []byte @@ -47,6 +48,7 @@ func NewHIDRecon(s *session.Session) *HIDRecon { SessionModule: session.NewSessionModule("hid", s), waitGroup: &sync.WaitGroup{}, sniffLock: &sync.Mutex{}, + writeLock: &sync.Mutex{}, hopPeriod: 100 * time.Millisecond, pingPeriod: 100 * time.Millisecond, sniffPeriod: 500 * time.Millisecond, diff --git a/modules/hid/hid_inject.go b/modules/hid/hid_inject.go index 2a1b5a83..b9059381 100644 --- a/modules/hid/hid_inject.go +++ b/modules/hid/hid_inject.go @@ -81,6 +81,9 @@ func (mod *HIDRecon) prepInjection() (error, *network.HIDDevice, []*Command) { } func (mod *HIDRecon) doInjection() { + mod.writeLock.Lock() + defer mod.writeLock.Unlock() + err, dev, cmds := mod.prepInjection() if err != nil { mod.Error("%v", err) diff --git a/modules/hid/hid_recon.go b/modules/hid/hid_recon.go index 92375058..351b9be0 100644 --- a/modules/hid/hid_recon.go +++ b/modules/hid/hid_recon.go @@ -7,6 +7,9 @@ import ( ) func (mod *HIDRecon) doHopping() { + mod.writeLock.Lock() + defer mod.writeLock.Unlock() + if mod.inPromMode == false { if err := mod.dongle.EnterPromiscMode(); err != nil { mod.Error("error entering promiscuous mode: %v", err) diff --git a/modules/hid/hid_sniff.go b/modules/hid/hid_sniff.go index 65805c2d..a5abf5d0 100644 --- a/modules/hid/hid_sniff.go +++ b/modules/hid/hid_sniff.go @@ -40,6 +40,9 @@ func (mod *HIDRecon) setSniffMode(mode string) error { } func (mod *HIDRecon) doPing() { + mod.writeLock.Lock() + defer mod.writeLock.Unlock() + if mod.inSniffMode == false { if err := mod.dongle.EnterSnifferModeFor(mod.sniffAddrRaw); err != nil { mod.Error("error entering sniffer mode for %s: %v", mod.sniffAddr, err)