dhcp: Remove unused attribute allocation
authorNikolai Kondrashov <Nikolai.Kondrashov@redhat.com>
Tue, 9 Sep 2014 10:52:05 +0000 (13:52 +0300)
committerNikolai Kondrashov <Nikolai.Kondrashov@redhat.com>
Tue, 9 Sep 2014 15:06:27 +0000 (18:06 +0300)
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.

src/modules/proto_dhcp/dhcp.c

index a5880b7..85d7ba1 100644 (file)
@@ -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;
                }