diff options
| -rw-r--r-- | net/netlabel/netlabel_cipso_v4.c | 3 | ||||
| -rw-r--r-- | net/netlabel/netlabel_mgmt.c | 50 |
2 files changed, 25 insertions, 28 deletions
diff --git a/net/netlabel/netlabel_cipso_v4.c b/net/netlabel/netlabel_cipso_v4.c index 179625353cac..7fd1104ba900 100644 --- a/net/netlabel/netlabel_cipso_v4.c +++ b/net/netlabel/netlabel_cipso_v4.c | |||
| @@ -324,8 +324,7 @@ static int netlbl_cipsov4_add_std(struct genl_info *info, | |||
| 324 | return 0; | 324 | return 0; |
| 325 | 325 | ||
| 326 | add_std_failure: | 326 | add_std_failure: |
| 327 | if (doi_def) | 327 | cipso_v4_doi_free(doi_def); |
| 328 | cipso_v4_doi_free(doi_def); | ||
| 329 | return ret_val; | 328 | return ret_val; |
| 330 | } | 329 | } |
| 331 | 330 | ||
diff --git a/net/netlabel/netlabel_mgmt.c b/net/netlabel/netlabel_mgmt.c index 8b3b789c43c2..70440748fe5c 100644 --- a/net/netlabel/netlabel_mgmt.c +++ b/net/netlabel/netlabel_mgmt.c | |||
| @@ -93,23 +93,20 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 93 | struct netlbl_audit *audit_info) | 93 | struct netlbl_audit *audit_info) |
| 94 | { | 94 | { |
| 95 | int ret_val = -EINVAL; | 95 | int ret_val = -EINVAL; |
| 96 | struct netlbl_dom_map *entry = NULL; | ||
| 97 | struct netlbl_domaddr_map *addrmap = NULL; | 96 | struct netlbl_domaddr_map *addrmap = NULL; |
| 98 | struct cipso_v4_doi *cipsov4 = NULL; | 97 | struct cipso_v4_doi *cipsov4 = NULL; |
| 99 | u32 tmp_val; | 98 | u32 tmp_val; |
| 99 | struct netlbl_dom_map *entry = kzalloc(sizeof(*entry), GFP_KERNEL); | ||
| 100 | 100 | ||
| 101 | entry = kzalloc(sizeof(*entry), GFP_KERNEL); | 101 | if (!entry) |
| 102 | if (entry == NULL) { | 102 | return -ENOMEM; |
| 103 | ret_val = -ENOMEM; | ||
| 104 | goto add_failure; | ||
| 105 | } | ||
| 106 | entry->def.type = nla_get_u32(info->attrs[NLBL_MGMT_A_PROTOCOL]); | 103 | entry->def.type = nla_get_u32(info->attrs[NLBL_MGMT_A_PROTOCOL]); |
| 107 | if (info->attrs[NLBL_MGMT_A_DOMAIN]) { | 104 | if (info->attrs[NLBL_MGMT_A_DOMAIN]) { |
| 108 | size_t tmp_size = nla_len(info->attrs[NLBL_MGMT_A_DOMAIN]); | 105 | size_t tmp_size = nla_len(info->attrs[NLBL_MGMT_A_DOMAIN]); |
| 109 | entry->domain = kmalloc(tmp_size, GFP_KERNEL); | 106 | entry->domain = kmalloc(tmp_size, GFP_KERNEL); |
| 110 | if (entry->domain == NULL) { | 107 | if (entry->domain == NULL) { |
| 111 | ret_val = -ENOMEM; | 108 | ret_val = -ENOMEM; |
| 112 | goto add_failure; | 109 | goto add_free_entry; |
| 113 | } | 110 | } |
| 114 | nla_strlcpy(entry->domain, | 111 | nla_strlcpy(entry->domain, |
| 115 | info->attrs[NLBL_MGMT_A_DOMAIN], tmp_size); | 112 | info->attrs[NLBL_MGMT_A_DOMAIN], tmp_size); |
| @@ -125,16 +122,16 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 125 | break; | 122 | break; |
| 126 | case NETLBL_NLTYPE_CIPSOV4: | 123 | case NETLBL_NLTYPE_CIPSOV4: |
| 127 | if (!info->attrs[NLBL_MGMT_A_CV4DOI]) | 124 | if (!info->attrs[NLBL_MGMT_A_CV4DOI]) |
| 128 | goto add_failure; | 125 | goto add_free_domain; |
| 129 | 126 | ||
| 130 | tmp_val = nla_get_u32(info->attrs[NLBL_MGMT_A_CV4DOI]); | 127 | tmp_val = nla_get_u32(info->attrs[NLBL_MGMT_A_CV4DOI]); |
| 131 | cipsov4 = cipso_v4_doi_getdef(tmp_val); | 128 | cipsov4 = cipso_v4_doi_getdef(tmp_val); |
| 132 | if (cipsov4 == NULL) | 129 | if (cipsov4 == NULL) |
| 133 | goto add_failure; | 130 | goto add_free_domain; |
| 134 | entry->def.cipso = cipsov4; | 131 | entry->def.cipso = cipsov4; |
| 135 | break; | 132 | break; |
| 136 | default: | 133 | default: |
| 137 | goto add_failure; | 134 | goto add_free_domain; |
| 138 | } | 135 | } |
| 139 | 136 | ||
| 140 | if (info->attrs[NLBL_MGMT_A_IPV4ADDR]) { | 137 | if (info->attrs[NLBL_MGMT_A_IPV4ADDR]) { |
| @@ -145,7 +142,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 145 | addrmap = kzalloc(sizeof(*addrmap), GFP_KERNEL); | 142 | addrmap = kzalloc(sizeof(*addrmap), GFP_KERNEL); |
| 146 | if (addrmap == NULL) { | 143 | if (addrmap == NULL) { |
| 147 | ret_val = -ENOMEM; | 144 | ret_val = -ENOMEM; |
| 148 | goto add_failure; | 145 | goto add_doi_put_def; |
| 149 | } | 146 | } |
| 150 | INIT_LIST_HEAD(&addrmap->list4); | 147 | INIT_LIST_HEAD(&addrmap->list4); |
| 151 | INIT_LIST_HEAD(&addrmap->list6); | 148 | INIT_LIST_HEAD(&addrmap->list6); |
| @@ -153,12 +150,12 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 153 | if (nla_len(info->attrs[NLBL_MGMT_A_IPV4ADDR]) != | 150 | if (nla_len(info->attrs[NLBL_MGMT_A_IPV4ADDR]) != |
| 154 | sizeof(struct in_addr)) { | 151 | sizeof(struct in_addr)) { |
| 155 | ret_val = -EINVAL; | 152 | ret_val = -EINVAL; |
| 156 | goto add_failure; | 153 | goto add_free_addrmap; |
| 157 | } | 154 | } |
| 158 | if (nla_len(info->attrs[NLBL_MGMT_A_IPV4MASK]) != | 155 | if (nla_len(info->attrs[NLBL_MGMT_A_IPV4MASK]) != |
| 159 | sizeof(struct in_addr)) { | 156 | sizeof(struct in_addr)) { |
| 160 | ret_val = -EINVAL; | 157 | ret_val = -EINVAL; |
| 161 | goto add_failure; | 158 | goto add_free_addrmap; |
| 162 | } | 159 | } |
| 163 | addr = nla_data(info->attrs[NLBL_MGMT_A_IPV4ADDR]); | 160 | addr = nla_data(info->attrs[NLBL_MGMT_A_IPV4ADDR]); |
| 164 | mask = nla_data(info->attrs[NLBL_MGMT_A_IPV4MASK]); | 161 | mask = nla_data(info->attrs[NLBL_MGMT_A_IPV4MASK]); |
| @@ -166,7 +163,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 166 | map = kzalloc(sizeof(*map), GFP_KERNEL); | 163 | map = kzalloc(sizeof(*map), GFP_KERNEL); |
| 167 | if (map == NULL) { | 164 | if (map == NULL) { |
| 168 | ret_val = -ENOMEM; | 165 | ret_val = -ENOMEM; |
| 169 | goto add_failure; | 166 | goto add_free_addrmap; |
| 170 | } | 167 | } |
| 171 | map->list.addr = addr->s_addr & mask->s_addr; | 168 | map->list.addr = addr->s_addr & mask->s_addr; |
| 172 | map->list.mask = mask->s_addr; | 169 | map->list.mask = mask->s_addr; |
| @@ -178,7 +175,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 178 | ret_val = netlbl_af4list_add(&map->list, &addrmap->list4); | 175 | ret_val = netlbl_af4list_add(&map->list, &addrmap->list4); |
| 179 | if (ret_val != 0) { | 176 | if (ret_val != 0) { |
| 180 | kfree(map); | 177 | kfree(map); |
| 181 | goto add_failure; | 178 | goto add_free_addrmap; |
| 182 | } | 179 | } |
| 183 | 180 | ||
| 184 | entry->def.type = NETLBL_NLTYPE_ADDRSELECT; | 181 | entry->def.type = NETLBL_NLTYPE_ADDRSELECT; |
| @@ -192,7 +189,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 192 | addrmap = kzalloc(sizeof(*addrmap), GFP_KERNEL); | 189 | addrmap = kzalloc(sizeof(*addrmap), GFP_KERNEL); |
| 193 | if (addrmap == NULL) { | 190 | if (addrmap == NULL) { |
| 194 | ret_val = -ENOMEM; | 191 | ret_val = -ENOMEM; |
| 195 | goto add_failure; | 192 | goto add_doi_put_def; |
| 196 | } | 193 | } |
| 197 | INIT_LIST_HEAD(&addrmap->list4); | 194 | INIT_LIST_HEAD(&addrmap->list4); |
| 198 | INIT_LIST_HEAD(&addrmap->list6); | 195 | INIT_LIST_HEAD(&addrmap->list6); |
| @@ -200,12 +197,12 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 200 | if (nla_len(info->attrs[NLBL_MGMT_A_IPV6ADDR]) != | 197 | if (nla_len(info->attrs[NLBL_MGMT_A_IPV6ADDR]) != |
| 201 | sizeof(struct in6_addr)) { | 198 | sizeof(struct in6_addr)) { |
| 202 | ret_val = -EINVAL; | 199 | ret_val = -EINVAL; |
| 203 | goto add_failure; | 200 | goto add_free_addrmap; |
| 204 | } | 201 | } |
| 205 | if (nla_len(info->attrs[NLBL_MGMT_A_IPV6MASK]) != | 202 | if (nla_len(info->attrs[NLBL_MGMT_A_IPV6MASK]) != |
| 206 | sizeof(struct in6_addr)) { | 203 | sizeof(struct in6_addr)) { |
| 207 | ret_val = -EINVAL; | 204 | ret_val = -EINVAL; |
| 208 | goto add_failure; | 205 | goto add_free_addrmap; |
| 209 | } | 206 | } |
| 210 | addr = nla_data(info->attrs[NLBL_MGMT_A_IPV6ADDR]); | 207 | addr = nla_data(info->attrs[NLBL_MGMT_A_IPV6ADDR]); |
| 211 | mask = nla_data(info->attrs[NLBL_MGMT_A_IPV6MASK]); | 208 | mask = nla_data(info->attrs[NLBL_MGMT_A_IPV6MASK]); |
| @@ -213,7 +210,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 213 | map = kzalloc(sizeof(*map), GFP_KERNEL); | 210 | map = kzalloc(sizeof(*map), GFP_KERNEL); |
| 214 | if (map == NULL) { | 211 | if (map == NULL) { |
| 215 | ret_val = -ENOMEM; | 212 | ret_val = -ENOMEM; |
| 216 | goto add_failure; | 213 | goto add_free_addrmap; |
| 217 | } | 214 | } |
| 218 | map->list.addr = *addr; | 215 | map->list.addr = *addr; |
| 219 | map->list.addr.s6_addr32[0] &= mask->s6_addr32[0]; | 216 | map->list.addr.s6_addr32[0] &= mask->s6_addr32[0]; |
| @@ -227,7 +224,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 227 | ret_val = netlbl_af6list_add(&map->list, &addrmap->list6); | 224 | ret_val = netlbl_af6list_add(&map->list, &addrmap->list6); |
| 228 | if (ret_val != 0) { | 225 | if (ret_val != 0) { |
| 229 | kfree(map); | 226 | kfree(map); |
| 230 | goto add_failure; | 227 | goto add_free_addrmap; |
| 231 | } | 228 | } |
| 232 | 229 | ||
| 233 | entry->def.type = NETLBL_NLTYPE_ADDRSELECT; | 230 | entry->def.type = NETLBL_NLTYPE_ADDRSELECT; |
| @@ -237,16 +234,17 @@ static int netlbl_mgmt_add_common(struct genl_info *info, | |||
| 237 | 234 | ||
| 238 | ret_val = netlbl_domhsh_add(entry, audit_info); | 235 | ret_val = netlbl_domhsh_add(entry, audit_info); |
| 239 | if (ret_val != 0) | 236 | if (ret_val != 0) |
| 240 | goto add_failure; | 237 | goto add_free_addrmap; |
| 241 | 238 | ||
| 242 | return 0; | 239 | return 0; |
| 243 | 240 | ||
| 244 | add_failure: | 241 | add_free_addrmap: |
| 245 | if (cipsov4) | ||
| 246 | cipso_v4_doi_putdef(cipsov4); | ||
| 247 | if (entry) | ||
| 248 | kfree(entry->domain); | ||
| 249 | kfree(addrmap); | ||
