2022-10-11 20:36:45

by Kees Cook

[permalink] [raw]
Subject: [PATCH 1/5] pstore/ram: Consolidate kfree() paths

There's no reason to keep separate kfree() paths: either all allocations
succeeded, or not. Everything is torn down in the case of failure, so
adjust the callers to reflect this.

Cc: Anton Vorontsov <[email protected]>
Cc: Colin Cross <[email protected]>
Cc: Tony Luck <[email protected]>
Signed-off-by: Kees Cook <[email protected]>
---
fs/pstore/ram.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index fefe3d391d3a..348820a3ce88 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -451,6 +451,12 @@ static void ramoops_free_przs(struct ramoops_context *cxt)
{
int i;

+ /* Free pmsg PRZ */
+ persistent_ram_free(cxt->mprz);
+
+ /* Free console PRZ */
+ persistent_ram_free(cxt->cprz);
+
/* Free dump PRZs */
if (cxt->dprzs) {
for (i = 0; i < cxt->max_dump_cnt; i++)
@@ -772,12 +778,12 @@ static int ramoops_probe(struct platform_device *pdev)
dump_mem_sz, cxt->record_size,
&cxt->max_dump_cnt, 0, 0);
if (err)
- goto fail_out;
+ goto fail_init;

err = ramoops_init_prz("console", dev, cxt, &cxt->cprz, &paddr,
cxt->console_size, 0);
if (err)
- goto fail_init_cprz;
+ goto fail_init;

cxt->max_ftrace_cnt = (cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU)
? nr_cpu_ids
@@ -788,12 +794,12 @@ static int ramoops_probe(struct platform_device *pdev)
(cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU)
? PRZ_FLAG_NO_LOCK : 0);
if (err)
- goto fail_init_fprz;
+ goto fail_init;

err = ramoops_init_prz("pmsg", dev, cxt, &cxt->mprz, &paddr,
cxt->pmsg_size, 0);
if (err)
- goto fail_init_mprz;
+ goto fail_init;

cxt->pstore.data = cxt;
/*
@@ -857,11 +863,7 @@ static int ramoops_probe(struct platform_device *pdev)
kfree(cxt->pstore.buf);
fail_clear:
cxt->pstore.bufsize = 0;
- persistent_ram_free(cxt->mprz);
-fail_init_mprz:
-fail_init_fprz:
- persistent_ram_free(cxt->cprz);
-fail_init_cprz:
+fail_init:
ramoops_free_przs(cxt);
fail_out:
return err;
@@ -876,8 +878,6 @@ static int ramoops_remove(struct platform_device *pdev)
kfree(cxt->pstore.buf);
cxt->pstore.bufsize = 0;

- persistent_ram_free(cxt->mprz);
- persistent_ram_free(cxt->cprz);
ramoops_free_przs(cxt);

return 0;
--
2.34.1


2022-10-12 20:15:02

by Guilherme G. Piccoli

[permalink] [raw]
Subject: Re: [PATCH 1/5] pstore/ram: Consolidate kfree() paths

On 11/10/2022 17:01, Kees Cook wrote:
> There's no reason to keep separate kfree() paths: either all allocations
> succeeded, or not. Everything is torn down in the case of failure, so
> adjust the callers to reflect this.
>
> Cc: Anton Vorontsov <[email protected]>
> Cc: Colin Cross <[email protected]>
> Cc: Tony Luck <[email protected]>
> Signed-off-by: Kees Cook <[email protected]>
> ---
> fs/pstore/ram.c | 22 +++++++++++-----------
> 1 file changed, 11 insertions(+), 11 deletions(-)
>

Reviewed-and-tested-by: Guilherme G. Piccoli <[email protected]>

Tested by building / booting and triggering crashes with efi and ramoops
backends.
Cheers,


Guilherme