summaryrefslogtreecommitdiffstats
path: root/mDNSResponder
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-01-23 14:59:37 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-01-30 16:23:04 +0100
commit406a2f4c8a51d251c88f42154b6f57619a22ef3b (patch)
treea066b1543b1a48a20b0765a2f3c060bad73b821f /mDNSResponder
parentmDNS: Add basic support (diff)
downloadrtems-libbsd-406a2f4c8a51d251c88f42154b6f57619a22ef3b.tar.bz2
mDNS: AnonInfoAnswersQuestion: Fix stack usage
The mDNSexport is normally defined to be empty, thus mDNSStorage is a huge stack variable (roughly 50KiB) with random data. Asuming a global mDNSStorage variable in the mDNSCore makes no sense.
Diffstat (limited to 'mDNSResponder')
-rw-r--r--mDNSResponder/mDNSCore/anonymous.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/mDNSResponder/mDNSCore/anonymous.c b/mDNSResponder/mDNSCore/anonymous.c
index 94b102ec..55a83175 100644
--- a/mDNSResponder/mDNSCore/anonymous.c
+++ b/mDNSResponder/mDNSCore/anonymous.c
@@ -249,12 +249,17 @@ mDNSexport void SetAnonData(DNSQuestion *q, ResourceRecord *rr, mDNSBool ForQues
}
}
+mDNSlocal char *RRDisplayStringBuf(const ResourceRecord *const rr, char *const buffer)
+{
+ return GetRRDisplayString_rdb(rr, &rr->rdata->u, buffer);
+}
+
// returns -1 if the caller should ignore the result
// returns 1 if the record answers the question
// returns 0 if the record does not answer the question
mDNSexport int AnonInfoAnswersQuestion(const ResourceRecord *const rr, const DNSQuestion *const q)
{
- mDNSexport mDNS mDNSStorage;
+ char MsgBuffer[MaxMsg]; // Temp storage used while building error log messages
ResourceRecord *nsec3RR;
int i;
AnonymousInfo *qai, *rai;
@@ -337,7 +342,7 @@ mDNSexport int AnonInfoAnswersQuestion(const ResourceRecord *const rr, const DNS
mDNSPlatformMemCmp(qai->AnonData, rai->AnonData, qai->AnonDataLen) != 0)
{
debugf("AnonInfoAnswersQuestion: AnonData mis-match for record %s question %##s ",
- RRDisplayString(&mDNSStorage, rr), q->qname.c);
+ RRDisplayStringBuf(rr, MsgBuffer), q->qname.c);
return 0;
}
// AnonData matches i.e they belong to the same group and the same service.
@@ -375,10 +380,10 @@ mDNSexport int AnonInfoAnswersQuestion(const ResourceRecord *const rr, const DNS
// AnonData can be NULL for the cache entry and if we are hearing our own question back, AnonData is NULL for
// that too and we can end up here for that case.
debugf("AnonInfoAnswersQuestion: AnonData %p or nsec3RR %p, NULL for question %##s, record %s", AnonData, nsec3RR,
- q->qname.c, RRDisplayString(&mDNSStorage, rr));
+ q->qname.c, RRDisplayStringBuf(rr, MsgBuffer));
return 0;
}
- debugf("AnonInfoAnswersQuestion: Validating question %##s, ResourceRecord %s", q->qname.c, RRDisplayString(&mDNSStorage, nsec3RR));
+ debugf("AnonInfoAnswersQuestion: Validating question %##s, ResourceRecord %s", q->qname.c, RRDisplayStringBuf(nsec3RR, MsgBuffer));
nsec3 = (rdataNSEC3 *)nsec3RR->rdata->u.data;
@@ -410,7 +415,7 @@ mDNSexport int AnonInfoAnswersQuestion(const ResourceRecord *const rr, const DNS
return 0;
}
}
- LogInfo("AnonInfoAnswersQuestion: ResourceRecord %s matched question %##s (%s)", RRDisplayString(&mDNSStorage, nsec3RR), q->qname.c, DNSTypeName(q->qtype));
+ LogInfo("AnonInfoAnswersQuestion: ResourceRecord %s matched question %##s (%s)", RRDisplayStringBuf(nsec3RR, MsgBuffer), q->qname.c, DNSTypeName(q->qtype));
return 1;
}