Skip to content

Commit

Permalink
net: fix e_str leak in veth_pair_add
Browse files Browse the repository at this point in the history
coverity CID 389187:

3193int veth_pair_add(char *in, char *out)
3194{
3195        char *e_str;
3196
    1. alloc_fn: Storage is returned from allocation function malloc.
    2. var_assign: Assigning: ___p = storage returned from malloc(200UL).
    3. Condition !___p, taking false branch.
    4. leaked_storage: Variable ___p going out of scope leaks the storage it points to.
    5. var_assign: Assigning: e_str = ({...; ___p;}).
3197        e_str = xmalloc(200); /* For 3 IFNAMSIZ + 8 service characters */
    6. Condition !e_str, taking false branch.
3198        if (!e_str)
3199                return -1;
    7. noescape: Resource e_str is not freed or pointed-to in snprintf.
3200        snprintf(e_str, 200, "veth[%s]:%s", in, out);
    8. noescape: Resource e_str is not freed or pointed-to in add_external. [show details]
    CID 389187 (#1 of 1): Resource leak (RESOURCE_LEAK)9. leaked_storage: Variable e_str going out of scope leaks the storage it points to.
3201        return add_external(e_str);
3202}

We should free e_str string after we finish it's use in veth_pair_add,
easiest way to do it is to use cleanup_free attribute.

Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
  • Loading branch information
Snorch authored and adrianreber committed Mar 14, 2022
1 parent 4173ef1 commit 076270f
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion criu/net.c
Original file line number Diff line number Diff line change
Expand Up @@ -3192,7 +3192,7 @@ void network_unlock(void)

int veth_pair_add(char *in, char *out)
{
char *e_str;
cleanup_free char *e_str = NULL;

e_str = xmalloc(200); /* For 3 IFNAMSIZ + 8 service characters */
if (!e_str)
Expand Down

0 comments on commit 076270f

Please sign in to comment.