crypto: cavium - add release_firmware to all return case
Two return case misses to call release_firmware() and so leak some memory. This patch create a fw_release label (and so a common error path) and use it on all return case. Detected by CoverityScan, CID#1416422 ("Resource Leak") Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
249cb06325
commit
baf5b752da
|
@ -268,8 +268,10 @@ static int cpt_ucode_load_fw(struct cpt_device *cpt, const u8 *fw, bool is_ae)
|
|||
mcode = &cpt->mcode[cpt->next_mc_idx];
|
||||
memcpy(mcode->version, (u8 *)fw_entry->data, CPT_UCODE_VERSION_SZ);
|
||||
mcode->code_size = ntohl(ucode->code_length) * 2;
|
||||
if (!mcode->code_size)
|
||||
return -EINVAL;
|
||||
if (!mcode->code_size) {
|
||||
ret = -EINVAL;
|
||||
goto fw_release;
|
||||
}
|
||||
|
||||
mcode->is_ae = is_ae;
|
||||
mcode->core_mask = 0ULL;
|
||||
|
@ -280,7 +282,8 @@ static int cpt_ucode_load_fw(struct cpt_device *cpt, const u8 *fw, bool is_ae)
|
|||
&mcode->phys_base, GFP_KERNEL);
|
||||
if (!mcode->code) {
|
||||
dev_err(dev, "Unable to allocate space for microcode");
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto fw_release;
|
||||
}
|
||||
|
||||
memcpy((void *)mcode->code, (void *)(fw_entry->data + sizeof(*ucode)),
|
||||
|
@ -302,12 +305,14 @@ static int cpt_ucode_load_fw(struct cpt_device *cpt, const u8 *fw, bool is_ae)
|
|||
ret = do_cpt_init(cpt, mcode);
|
||||
if (ret) {
|
||||
dev_err(dev, "do_cpt_init failed with ret: %d\n", ret);
|
||||
return ret;
|
||||
goto fw_release;
|
||||
}
|
||||
|
||||
dev_info(dev, "Microcode Loaded %s\n", mcode->version);
|
||||
mcode->is_mc_valid = 1;
|
||||
cpt->next_mc_idx++;
|
||||
|
||||
fw_release:
|
||||
release_firmware(fw_entry);
|
||||
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue