fix: locking session object instance while session.Run

This commit is contained in:
evilsocket 2019-02-24 22:22:22 +01:00
commit d5016bc506
No known key found for this signature in database
GPG key ID: 1564D7F30393A456
2 changed files with 11 additions and 0 deletions

View file

@ -27,6 +27,9 @@ func NewAccessPoint(essid, bssid string, frequency int, rssi int8) *AccessPoint
} }
func (ap *AccessPoint) MarshalJSON() ([]byte, error) { func (ap *AccessPoint) MarshalJSON() ([]byte, error) {
ap.Lock()
defer ap.Unlock()
doc := apJSON{ doc := apJSON{
Station: ap.Station, Station: ap.Station,
Clients: make([]*Station, 0), Clients: make([]*Station, 0),

View file

@ -11,6 +11,7 @@ import (
"runtime/pprof" "runtime/pprof"
"sort" "sort"
"strings" "strings"
"sync"
"time" "time"
"github.com/bettercap/readline" "github.com/bettercap/readline"
@ -94,6 +95,8 @@ type Session struct {
Events *EventPool `json:"-"` Events *EventPool `json:"-"`
UnkCmdCallback UnknownCommandCallback `json:"-"` UnkCmdCallback UnknownCommandCallback `json:"-"`
Firewall firewall.FirewallManager `json:"-"` Firewall firewall.FirewallManager `json:"-"`
cmdLock sync.Mutex
} }
func New() (*Session, error) { func New() (*Session, error) {
@ -118,6 +121,8 @@ func New() (*Session, error) {
Modules: make([]Module, 0), Modules: make([]Module, 0),
Events: nil, Events: nil,
UnkCmdCallback: nil, UnkCmdCallback: nil,
cmdLock: sync.Mutex{},
} }
if *s.Options.CpuProfile != "" { if *s.Options.CpuProfile != "" {
@ -386,6 +391,9 @@ func parseCapletCommand(line string) (is bool, caplet *caplets.Caplet, argv []st
} }
func (s *Session) Run(line string) error { func (s *Session) Run(line string) error {
s.cmdLock.Lock()
defer s.cmdLock.Unlock()
line = str.TrimRight(line) line = str.TrimRight(line)
// remove extra spaces after the first command // remove extra spaces after the first command
// so that 'arp.spoof on' is normalized // so that 'arp.spoof on' is normalized