]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/utils: fix memory leak since 58def8bb7
authorVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 3 Dec 2018 15:43:13 +0000 (16:43 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 3 Dec 2018 15:56:46 +0000 (16:56 +0100)
The problem was the mm_malloc() typo :-/ so allocation was going through
malloc() instead of the packet's allocator (always memory pool ATM).
I added mm_free() for better correctness anyway.

lib/utils.c

index 5c7378038ec9cf1f1600d09fc56e15f98aef2356..7c9d6f54bb8719ac023c3b2528842260cb52fd3e 100644 (file)
@@ -338,6 +338,8 @@ int kr_pkt_clear_payload(knot_pkt_t *pkt)
 int kr_pkt_put(knot_pkt_t *pkt, const knot_dname_t *name, uint32_t ttl,
                uint16_t rclass, uint16_t rtype, const uint8_t *rdata, uint16_t rdlen)
 {
+       /* LATER(opt.): there's relatively lots of copying, but ATM kr_pkt_put()
+        * isn't considered to be used in any performance-critical parts (just lua). */
        if (!pkt || !name)  {
                return kr_error(EINVAL);
        }
@@ -345,9 +347,10 @@ int kr_pkt_put(knot_pkt_t *pkt, const knot_dname_t *name, uint32_t ttl,
        knot_rrset_t rr;
        knot_rrset_init(&rr, knot_dname_copy(name, &pkt->mm), rtype, rclass, ttl);
        /* Create RDATA */
-       knot_rdata_t *rdata_tmp = mm_malloc(&pkt->mm, offsetof(knot_rdata_t, data) + rdlen);
+       knot_rdata_t *rdata_tmp = mm_alloc(&pkt->mm, offsetof(knot_rdata_t, data) + rdlen);
        knot_rdata_init(rdata_tmp, rdlen, rdata);
        knot_rdataset_add(&rr.rrs, rdata_tmp, &pkt->mm);
+       mm_free(&pkt->mm, rdata_tmp); /* we're always on mempool for now, but whatever */
        /* Append RR */
        return knot_pkt_put(pkt, 0, &rr, KNOT_PF_FREE);
 }