Commit 3219122b authored by Kees Cook's avatar Kees Cook

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 <anton@enomsg.org>
Cc: Colin Cross <ccross@android.com>
Cc: Tony Luck <tony.luck@intel.com>
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Reviewed-and-tested-by: default avatarGuilherme G. Piccoli <gpiccoli@igalia.com>
Link: https://lore.kernel.org/r/20221011200112.731334-2-keescook@chromium.org
parent 893c5f1d
...@@ -451,6 +451,12 @@ static void ramoops_free_przs(struct ramoops_context *cxt) ...@@ -451,6 +451,12 @@ static void ramoops_free_przs(struct ramoops_context *cxt)
{ {
int i; int i;
/* Free pmsg PRZ */
persistent_ram_free(cxt->mprz);
/* Free console PRZ */
persistent_ram_free(cxt->cprz);
/* Free dump PRZs */ /* Free dump PRZs */
if (cxt->dprzs) { if (cxt->dprzs) {
for (i = 0; i < cxt->max_dump_cnt; i++) for (i = 0; i < cxt->max_dump_cnt; i++)
...@@ -772,12 +778,12 @@ static int ramoops_probe(struct platform_device *pdev) ...@@ -772,12 +778,12 @@ static int ramoops_probe(struct platform_device *pdev)
dump_mem_sz, cxt->record_size, dump_mem_sz, cxt->record_size,
&cxt->max_dump_cnt, 0, 0); &cxt->max_dump_cnt, 0, 0);
if (err) if (err)
goto fail_out; goto fail_init;
err = ramoops_init_prz("console", dev, cxt, &cxt->cprz, &paddr, err = ramoops_init_prz("console", dev, cxt, &cxt->cprz, &paddr,
cxt->console_size, 0); cxt->console_size, 0);
if (err) if (err)
goto fail_init_cprz; goto fail_init;
cxt->max_ftrace_cnt = (cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU) cxt->max_ftrace_cnt = (cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU)
? nr_cpu_ids ? nr_cpu_ids
...@@ -788,12 +794,12 @@ static int ramoops_probe(struct platform_device *pdev) ...@@ -788,12 +794,12 @@ static int ramoops_probe(struct platform_device *pdev)
(cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU) (cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU)
? PRZ_FLAG_NO_LOCK : 0); ? PRZ_FLAG_NO_LOCK : 0);
if (err) if (err)
goto fail_init_fprz; goto fail_init;
err = ramoops_init_prz("pmsg", dev, cxt, &cxt->mprz, &paddr, err = ramoops_init_prz("pmsg", dev, cxt, &cxt->mprz, &paddr,
cxt->pmsg_size, 0); cxt->pmsg_size, 0);
if (err) if (err)
goto fail_init_mprz; goto fail_init;
cxt->pstore.data = cxt; cxt->pstore.data = cxt;
/* /*
...@@ -857,11 +863,7 @@ static int ramoops_probe(struct platform_device *pdev) ...@@ -857,11 +863,7 @@ static int ramoops_probe(struct platform_device *pdev)
kfree(cxt->pstore.buf); kfree(cxt->pstore.buf);
fail_clear: fail_clear:
cxt->pstore.bufsize = 0; cxt->pstore.bufsize = 0;
persistent_ram_free(cxt->mprz); fail_init:
fail_init_mprz:
fail_init_fprz:
persistent_ram_free(cxt->cprz);
fail_init_cprz:
ramoops_free_przs(cxt); ramoops_free_przs(cxt);
fail_out: fail_out:
return err; return err;
...@@ -876,8 +878,6 @@ static int ramoops_remove(struct platform_device *pdev) ...@@ -876,8 +878,6 @@ static int ramoops_remove(struct platform_device *pdev)
kfree(cxt->pstore.buf); kfree(cxt->pstore.buf);
cxt->pstore.bufsize = 0; cxt->pstore.bufsize = 0;
persistent_ram_free(cxt->mprz);
persistent_ram_free(cxt->cprz);
ramoops_free_przs(cxt); ramoops_free_przs(cxt);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment