pm80xx : Fix missing NULL pointer checks and memory leaks
Checking return value for the memory allocattion and freeing it while exiting the function Signed-off-by: Viswas G <Viswas.G@pmcs.com> Signed-off-by: Suresh Thiagarajan <Suresh.Thiagarajan@pmcs.com> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Acked-by: Jack Wang <xjtuwjp@gmail.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
f259d9bdd2
commit
b42939aa07
|
@ -395,6 +395,8 @@ static ssize_t pm8001_ctl_bios_version_show(struct device *cdev,
|
||||||
payload.offset = 0;
|
payload.offset = 0;
|
||||||
payload.length = 4096;
|
payload.length = 4096;
|
||||||
payload.func_specific = kzalloc(4096, GFP_KERNEL);
|
payload.func_specific = kzalloc(4096, GFP_KERNEL);
|
||||||
|
if (!payload.func_specific)
|
||||||
|
return -ENOMEM;
|
||||||
PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload);
|
PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload);
|
||||||
wait_for_completion(&completion);
|
wait_for_completion(&completion);
|
||||||
virt_addr = pm8001_ha->memoryMap.region[NVMD].virt_ptr;
|
virt_addr = pm8001_ha->memoryMap.region[NVMD].virt_ptr;
|
||||||
|
@ -402,6 +404,7 @@ static ssize_t pm8001_ctl_bios_version_show(struct device *cdev,
|
||||||
bios_index++)
|
bios_index++)
|
||||||
str += sprintf(str, "%c",
|
str += sprintf(str, "%c",
|
||||||
*((u8 *)((u8 *)virt_addr+bios_index)));
|
*((u8 *)((u8 *)virt_addr+bios_index)));
|
||||||
|
kfree(payload.func_specific);
|
||||||
return str - buf;
|
return str - buf;
|
||||||
}
|
}
|
||||||
static DEVICE_ATTR(bios_version, S_IRUGO, pm8001_ctl_bios_version_show, NULL);
|
static DEVICE_ATTR(bios_version, S_IRUGO, pm8001_ctl_bios_version_show, NULL);
|
||||||
|
|
Loading…
Reference in a new issue