mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-18 03:06:43 +00:00
tpm: Use managed allocation for bios event log
Since the bios event log is freed in the device release function, let devres handle the deallocation. This will allow other memory allocation/mapping functions to be used for the bios event log. Signed-off-by: Eddie James <eajames@linux.ibm.com> Tested-by: Jarkko Sakkinen <jarkko@kernel.org> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
This commit is contained in:
parent
40078327f6
commit
441b715272
@ -14,6 +14,7 @@
|
||||
* Access to the event log extended by the TCG BIOS of PC platform
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/security.h>
|
||||
@ -135,7 +136,7 @@ int tpm_read_log_acpi(struct tpm_chip *chip)
|
||||
}
|
||||
|
||||
/* malloc EventLog space */
|
||||
log->bios_event_log = kmalloc(len, GFP_KERNEL);
|
||||
log->bios_event_log = devm_kmalloc(&chip->dev, len, GFP_KERNEL);
|
||||
if (!log->bios_event_log)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -160,7 +161,7 @@ int tpm_read_log_acpi(struct tpm_chip *chip)
|
||||
return format;
|
||||
|
||||
err:
|
||||
kfree(log->bios_event_log);
|
||||
devm_kfree(&chip->dev, log->bios_event_log);
|
||||
log->bios_event_log = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
* Thiebaud Weksteen <tweek@google.com>
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/efi.h>
|
||||
#include <linux/tpm_eventlog.h>
|
||||
|
||||
@ -55,7 +56,7 @@ int tpm_read_log_efi(struct tpm_chip *chip)
|
||||
}
|
||||
|
||||
/* malloc EventLog space */
|
||||
log->bios_event_log = kmemdup(log_tbl->log, log_size, GFP_KERNEL);
|
||||
log->bios_event_log = devm_kmemdup(&chip->dev, log_tbl->log, log_size, GFP_KERNEL);
|
||||
if (!log->bios_event_log) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
@ -76,7 +77,7 @@ int tpm_read_log_efi(struct tpm_chip *chip)
|
||||
MEMREMAP_WB);
|
||||
if (!final_tbl) {
|
||||
pr_err("Could not map UEFI TPM final log\n");
|
||||
kfree(log->bios_event_log);
|
||||
devm_kfree(&chip->dev, log->bios_event_log);
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
@ -91,11 +92,11 @@ int tpm_read_log_efi(struct tpm_chip *chip)
|
||||
* Allocate memory for the 'combined log' where we will append the
|
||||
* 'final events log' to.
|
||||
*/
|
||||
tmp = krealloc(log->bios_event_log,
|
||||
log_size + final_events_log_size,
|
||||
GFP_KERNEL);
|
||||
tmp = devm_krealloc(&chip->dev, log->bios_event_log,
|
||||
log_size + final_events_log_size,
|
||||
GFP_KERNEL);
|
||||
if (!tmp) {
|
||||
kfree(log->bios_event_log);
|
||||
devm_kfree(&chip->dev, log->bios_event_log);
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
* Read the event log created by the firmware on PPC64
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/tpm_eventlog.h>
|
||||
@ -65,7 +66,7 @@ int tpm_read_log_of(struct tpm_chip *chip)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
log->bios_event_log = kmemdup(__va(base), size, GFP_KERNEL);
|
||||
log->bios_event_log = devm_kmemdup(&chip->dev, __va(base), size, GFP_KERNEL);
|
||||
if (!log->bios_event_log)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -267,7 +267,6 @@ static void tpm_dev_release(struct device *dev)
|
||||
idr_remove(&dev_nums_idr, chip->dev_num);
|
||||
mutex_unlock(&idr_lock);
|
||||
|
||||
kfree(chip->log.bios_event_log);
|
||||
kfree(chip->work_space.context_buf);
|
||||
kfree(chip->work_space.session_buf);
|
||||
kfree(chip->allocated_banks);
|
||||
|
Loading…
x
Reference in New Issue
Block a user