]> git.proxmox.com Git - ovs.git/commitdiff
ovsdb-idlc: Fix memory leak reported by Coverity.
authorWilliam Tu <u9012063@gmail.com>
Sat, 2 May 2020 16:08:26 +0000 (09:08 -0700)
committerWilliam Tu <u9012063@gmail.com>
Tue, 12 May 2020 15:35:22 +0000 (08:35 -0700)
An exmplae pattern shown below:
void
ovsrec_ct_zone_index_set_external_ids(const struct ovsrec_ct_zone...
{
//  1. alloc_fn: Storage is returned from allocation function xmalloc.
//  2. var_assign: Assigning: datum = storage returned from xmalloc(24UL).
    struct ovsdb_datum *datum = xmalloc(sizeof(struct ovsdb_datum));

//  3. Condition external_ids, taking false branch.
    if (external_ids) {
...
    } else {
//  4. noescape: Resource datum is not freed or pointed-to in ovsdb_datum_init_empty.
        ovsdb_datum_init_empty(datum);
    }
//  5. noescape: Resource datum is not freed or pointed-to in ovsdb_idl_index_write.
    ovsdb_idl_index_write(CONST_CAST(struct ovsdb_idl_row *, &row->header_),
                          &ovsrec_ct_zone_columns[OVSREC_CT_ZONE_COL_EXTERNAL_IDS],
                          datum,
                          &ovsrec_table_classes[OVSREC_TABLE_CT_ZONE]);

// CID 1420856 (#1 of 1): Resource leak (RESOURCE_LEAK)
// 6. leaked_storage: Variable datum going out of scope leaks the storage it
      points to.
Fix it by freeing the datum.

Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
Signed-off-by: William Tu <u9012063@gmail.com>
ovsdb/ovsdb-idlc.in

index 1d385e15c1e569f824f2a546658a38d29b948595..698fe25f30957e3312de9cc1b2d6d9c0089bdd63 100755 (executable)
@@ -1306,6 +1306,7 @@ struct %(s)s *
                           &%(s)s_columns[%(S)s_COL_%(C)s],
                           datum,
                           &%(p)stable_classes[%(P)sTABLE_%(T)s]);
+    free(datum);
 }
 """ % {'t': tableName,
        'p': prefix,