From: Nikolai Kondrashov Date: Tue, 9 Sep 2014 10:52:05 +0000 (+0300) Subject: dhcp: Remove unused attribute allocation X-Git-Tag: 3.0.4+moonshot1~18^2~3 X-Git-Url: http://www.project-moonshot.org/gitweb/?a=commitdiff_plain;h=6d1c8c3d758d3f7f479c1b2105b646c594297609;p=freeradius.git dhcp: Remove unused attribute allocation Remove unused and unfreed unknown attribute allocation to prevent memory leak. Coverity has reported the following error for this issue. Error: RESOURCE_LEAK (CWE-772): freeradius-server-3.0.4rc2/src/modules/proto_dhcp/dhcp.c:956: alloc_fn: Storage is returned from allocation function "dict_attrunknown(unsigned int, unsigned int, int)". freeradius-server-3.0.4rc2/src/lib/dict.c:2666:2: alloc_fn: Storage is returned from allocation function "malloc(size_t)". freeradius-server-3.0.4rc2/src/lib/dict.c:2666:2: var_assign: Assigning: "da" = "malloc(148UL)". freeradius-server-3.0.4rc2/src/lib/dict.c:2671:2: noescape: Resource "da" is not freed or pointed-to in function "memset(void *, int, size_t)". freeradius-server-3.0.4rc2/src/lib/dict.c:2687:2: var_assign: Assigning: "p" = "da". freeradius-server-3.0.4rc2/src/lib/dict.c:2689:2: noescape: Resource "p" is not freed or pointed-to in function "snprintf(char * restrict, size_t, char const * restrict, ...)". freeradius-server-3.0.4rc2/src/lib/dict.c:2712:3: noescape: Resource "p" is not freed or pointed-to in function "snprintf(char * restrict, size_t, char const * restrict, ...)". freeradius-server-3.0.4rc2/src/lib/dict.c:2718:2: noescape: Resource "p" is not freed or pointed-to in function "print_attr_oid(char *, size_t, unsigned int, int)". freeradius-server-3.0.4rc2/src/lib/dict.c:2546:36: noescape: "print_attr_oid(char *, size_t, unsigned int, int)" does not free or save its pointer parameter "buffer". freeradius-server-3.0.4rc2/src/lib/dict.c:2720:2: return_alloc: Returning allocated memory "da". freeradius-server-3.0.4rc2/src/modules/proto_dhcp/dhcp.c:956: var_assign: Assigning: "da" = storage returned from "dict_attrunknown(p[0], 54U, 1)". freeradius-server-3.0.4rc2/src/modules/proto_dhcp/dhcp.c:991: leaked_storage: Variable "da" going out of scope leaks the storage it points to. --- diff --git a/src/modules/proto_dhcp/dhcp.c b/src/modules/proto_dhcp/dhcp.c index a5880b7..85d7ba1 100644 --- a/src/modules/proto_dhcp/dhcp.c +++ b/src/modules/proto_dhcp/dhcp.c @@ -953,11 +953,6 @@ ssize_t fr_dhcp_decode_options(VALUE_PAIR **out, TALLOC_CTX *ctx, uint8_t const da = dict_attrbyvalue(p[0], DHCP_MAGIC_VENDOR); if (!da) { - da = dict_attrunknown(p[0], DHCP_MAGIC_VENDOR, true); - if (!da) { - pairfree(out); - return -1; - } goto next; }