summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-09-08 16:09:56 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-09-08 16:09:56 -0700
commit1f6b13b7fdd8d1b79a754338d6ef4f30fd0d4064 (patch)
tree12a819f2e022b797eb57d33d66d14d35be75b6fc /node
parentd23ade879b930c5397d8ed95745dcc03fccbc61c (diff)
downloadinfinitytier-1f6b13b7fdd8d1b79a754338d6ef4f30fd0d4064.tar.gz
infinitytier-1f6b13b7fdd8d1b79a754338d6ef4f30fd0d4064.zip
Fix bug causing null addresses to get in memberships[] hash.
Diffstat (limited to 'node')
-rw-r--r--node/Network.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/node/Network.cpp b/node/Network.cpp
index 8b22c097..7aa2a78b 100644
--- a/node/Network.cpp
+++ b/node/Network.cpp
@@ -656,8 +656,12 @@ bool Network::filterOutgoingPacket(
Mutex::Lock _l(_lock);
- Membership &m = _memberships[ztDest];
- const unsigned int remoteTagCount = m.getAllTags(_config,remoteTagIds,remoteTagValues,ZT_MAX_NETWORK_TAGS);
+ Membership *m = (Membership *)0;
+ unsigned int remoteTagCount = 0;
+ if (ztDest) {
+ m = &(_memberships[ztDest]);
+ remoteTagCount = m->getAllTags(_config,remoteTagIds,remoteTagValues,ZT_MAX_NETWORK_TAGS);
+ }
switch(_doZtFilter(RR,_config,false,ztSource,ztDest2,macSource,macDest,frameData,frameLen,etherType,vlanId,_config.rules,_config.ruleCount,_config.tags,_config.tagCount,remoteTagIds,remoteTagValues,remoteTagCount,cc,ccLength)) {
@@ -737,8 +741,8 @@ bool Network::filterOutgoingPacket(
RR->sw->send(outp,true);
return false; // DROP locally, since we redirected
- } else if (ztDest) {
- m.sendCredentialsIfNeeded(RR,RR->node->now(),ztDest,_config,relevantCap);
+ } else if (m) {
+ m->sendCredentialsIfNeeded(RR,RR->node->now(),ztDest,_config,relevantCap);
}
}
@@ -764,7 +768,7 @@ int Network::filterIncomingPacket(
Mutex::Lock _l(_lock);
- Membership &m = _membership(ztDest);
+ Membership &m = _membership(sourcePeer->address());
const unsigned int remoteTagCount = m.getAllTags(_config,remoteTagIds,remoteTagValues,ZT_MAX_NETWORK_TAGS);
switch (_doZtFilter(RR,_config,true,sourcePeer->address(),ztDest2,macSource,macDest,frameData,frameLen,etherType,vlanId,_config.rules,_config.ruleCount,_config.tags,_config.tagCount,remoteTagIds,remoteTagValues,remoteTagCount,cc,ccLength)) {