summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2023-11-02 00:00:22 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2023-11-02 00:00:22 +0000
commit70dfc2d75689339215d26637182830fc7348348b (patch)
tree4b7c7a8af57b47c4063b6305a7f57ecc18834c27
parentf67c4c85232b032f1825de30f4f943789257984e (diff)
ndb/dns: fix memory leak in dnzone()
-rw-r--r--sys/src/cmd/ndb/dntcpserver.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/sys/src/cmd/ndb/dntcpserver.c b/sys/src/cmd/ndb/dntcpserver.c
index ba50da9f5..d7396f130 100644
--- a/sys/src/cmd/ndb/dntcpserver.c
+++ b/sys/src/cmd/ndb/dntcpserver.c
@@ -216,10 +216,8 @@ dnzone(int fd, uchar *pkt, DNSmsg *reqp, DNSmsg *repp, Request *req, uchar *call
repp->id = reqp->id;
repp->qd = reqp->qd;
reqp->qd = reqp->qd->next;
- repp->qd->next = 0;
+ repp->qd->next = nil;
repp->flags = Fauth | Fresp | Oquery;
- if(!cfg.nonrecursive)
- repp->flags |= Fcanrec;
setercode(repp, Rok);
dp = repp->qd->owner;
@@ -233,12 +231,10 @@ dnzone(int fd, uchar *pkt, DNSmsg *reqp, DNSmsg *repp, Request *req, uchar *call
repp->an = nil;
}
rv = reply(fd, pkt, repp, req, callip);
- if(repp->an == nil)
+ if(rv < 0 || repp->an == nil)
goto out;
rrfreelist(repp->an);
repp->an = nil;
- if(rv < 0)
- goto out;
repp->an = rrgetzone(dp->name);
while(repp->an != nil) {
@@ -254,9 +250,9 @@ dnzone(int fd, uchar *pkt, DNSmsg *reqp, DNSmsg *repp, Request *req, uchar *call
/* resend the soa */
repp->an = rrlookup(dp, Tsoa, NOneg);
rv = reply(fd, pkt, repp, req, callip);
+out:
rrfreelist(repp->an);
repp->an = nil;
-out:
rrfree(repp->qd);
repp->qd = nil;
return rv;