diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-11-02 00:00:22 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-11-02 00:00:22 +0000 |
commit | 70dfc2d75689339215d26637182830fc7348348b (patch) | |
tree | 4b7c7a8af57b47c4063b6305a7f57ecc18834c27 | |
parent | f67c4c85232b032f1825de30f4f943789257984e (diff) |
ndb/dns: fix memory leak in dnzone()
-rw-r--r-- | sys/src/cmd/ndb/dntcpserver.c | 10 |
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; |