Commit 94a80d63 authored by Julia Lawall's avatar Julia Lawall Committed by David S. Miller

net/netlabel/netlabel_kapi.c: add missing cleanup code

Call cipso_v4_doi_putdef in the case of the failure of the allocation of
entry.  Reverse the order of the error handling code at the end of the
function and insert more labels in order to reduce the number of
unnecessary calls to kfree.
Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2eed7982
...@@ -341,11 +341,11 @@ int netlbl_cfg_cipsov4_map_add(u32 doi, ...@@ -341,11 +341,11 @@ int netlbl_cfg_cipsov4_map_add(u32 doi,
entry = kzalloc(sizeof(*entry), GFP_ATOMIC); entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
if (entry == NULL) if (entry == NULL)
return -ENOMEM; goto out_entry;
if (domain != NULL) { if (domain != NULL) {
entry->domain = kstrdup(domain, GFP_ATOMIC); entry->domain = kstrdup(domain, GFP_ATOMIC);
if (entry->domain == NULL) if (entry->domain == NULL)
goto cfg_cipsov4_map_add_failure; goto out_domain;
} }
if (addr == NULL && mask == NULL) { if (addr == NULL && mask == NULL) {
...@@ -354,13 +354,13 @@ int netlbl_cfg_cipsov4_map_add(u32 doi, ...@@ -354,13 +354,13 @@ int netlbl_cfg_cipsov4_map_add(u32 doi,
} else if (addr != NULL && mask != NULL) { } else if (addr != NULL && mask != NULL) {
addrmap = kzalloc(sizeof(*addrmap), GFP_ATOMIC); addrmap = kzalloc(sizeof(*addrmap), GFP_ATOMIC);
if (addrmap == NULL) if (addrmap == NULL)
goto cfg_cipsov4_map_add_failure; goto out_addrmap;
INIT_LIST_HEAD(&addrmap->list4); INIT_LIST_HEAD(&addrmap->list4);
INIT_LIST_HEAD(&addrmap->list6); INIT_LIST_HEAD(&addrmap->list6);
addrinfo = kzalloc(sizeof(*addrinfo), GFP_ATOMIC); addrinfo = kzalloc(sizeof(*addrinfo), GFP_ATOMIC);
if (addrinfo == NULL) if (addrinfo == NULL)
goto cfg_cipsov4_map_add_failure; goto out_addrinfo;
addrinfo->type_def.cipsov4 = doi_def; addrinfo->type_def.cipsov4 = doi_def;
addrinfo->type = NETLBL_NLTYPE_CIPSOV4; addrinfo->type = NETLBL_NLTYPE_CIPSOV4;
addrinfo->list.addr = addr->s_addr & mask->s_addr; addrinfo->list.addr = addr->s_addr & mask->s_addr;
...@@ -374,7 +374,7 @@ int netlbl_cfg_cipsov4_map_add(u32 doi, ...@@ -374,7 +374,7 @@ int netlbl_cfg_cipsov4_map_add(u32 doi,
entry->type = NETLBL_NLTYPE_ADDRSELECT; entry->type = NETLBL_NLTYPE_ADDRSELECT;
} else { } else {
ret_val = -EINVAL; ret_val = -EINVAL;
goto cfg_cipsov4_map_add_failure; goto out_addrmap;
} }
ret_val = netlbl_domhsh_add(entry, audit_info); ret_val = netlbl_domhsh_add(entry, audit_info);
...@@ -384,11 +384,15 @@ int netlbl_cfg_cipsov4_map_add(u32 doi, ...@@ -384,11 +384,15 @@ int netlbl_cfg_cipsov4_map_add(u32 doi,
return 0; return 0;
cfg_cipsov4_map_add_failure: cfg_cipsov4_map_add_failure:
cipso_v4_doi_putdef(doi_def); kfree(addrinfo);
out_addrinfo:
kfree(addrmap);
out_addrmap:
kfree(entry->domain); kfree(entry->domain);
out_domain:
kfree(entry); kfree(entry);
kfree(addrmap); out_entry:
kfree(addrinfo); cipso_v4_doi_putdef(doi_def);
return ret_val; return ret_val;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment