aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2019-01-20 17:33:34 -0500
committerKees Cook <keescook@chromium.org>2019-01-20 17:44:52 -0500
commit5631e8576a3caf606cdc375f97425a67983b420c (patch)
tree4c5723127cca25af506b0edc6c8d75482d3e846f
parent6a4c9ab13feeacd3072175d7d1f1fcfabbb9fc90 (diff)
pstore/ram: Avoid allocation and leak of platform data
Yue Hu noticed that when parsing device tree the allocated platform data was never freed. Since it's not used beyond the function scope, this switches to using a stack variable instead. Reported-by: Yue Hu <huyue2@yulong.com> Fixes: 35da60941e44 ("pstore/ram: add Device Tree bindings") Cc: stable@vger.kernel.org Signed-off-by: Kees Cook <keescook@chromium.org>
-rw-r--r--fs/pstore/ram.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index 076e26fdc0c0..898c8321b343 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -710,18 +710,15 @@ static int ramoops_probe(struct platform_device *pdev)
710{ 710{
711 struct device *dev = &pdev->dev; 711 struct device *dev = &pdev->dev;
712 struct ramoops_platform_data *pdata = dev->platform_data; 712 struct ramoops_platform_data *pdata = dev->platform_data;
713 struct ramoops_platform_data pdata_local;
713 struct ramoops_context *cxt = &oops_cxt; 714 struct ramoops_context *cxt = &oops_cxt;
714 size_t dump_mem_sz; 715 size_t dump_mem_sz;
715 phys_addr_t paddr; 716 phys_addr_t paddr;
716 int err = -EINVAL; 717 int err = -EINVAL;
717 718
718 if (dev_of_node(dev) && !pdata) { 719 if (dev_of_node(dev) && !pdata) {
719 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 720 pdata = &pdata_local;
720 if (!pdata) { 721 memset(pdata, 0, sizeof(*pdata));
721 pr_err("cannot allocate platform data buffer\n");
722 err = -ENOMEM;
723 goto fail_out;
724 }
725 722
726 err = ramoops_parse_dt(pdev, pdata); 723 err = ramoops_parse_dt(pdev, pdata);
727 if (err < 0) 724 if (err < 0)