Message ID | 20180904212237.3078-2-atull@kernel.org (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | fpga: add devm managed create APIs | expand |
Hi Alan, On Tue, Sep 4, 2018 at 2:22 PM, Alan Tull <atull@kernel.org> wrote: > A couple drivers were accessing the region struct after it had been > freed. Save off the pointer to the mgr before the region struct gets > freed. > > Signed-off-by: Alan Tull <atull@kernel.org> Acked-by: Moritz Fischer <mdf@kernel.org> > --- > v2: no change in v2 of patchset > --- > drivers/fpga/dfl-fme-region.c | 4 +++- > drivers/fpga/of-fpga-region.c | 3 ++- > 2 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/fpga/dfl-fme-region.c b/drivers/fpga/dfl-fme-region.c > index 0b7e19c..51a5ac2 100644 > --- a/drivers/fpga/dfl-fme-region.c > +++ b/drivers/fpga/dfl-fme-region.c > @@ -14,6 +14,7 @@ > */ > > #include <linux/module.h> > +#include <linux/fpga/fpga-mgr.h> > #include <linux/fpga/fpga-region.h> > > #include "dfl-fme-pr.h" > @@ -66,9 +67,10 @@ static int fme_region_probe(struct platform_device *pdev) > static int fme_region_remove(struct platform_device *pdev) > { > struct fpga_region *region = dev_get_drvdata(&pdev->dev); > + struct fpga_manager *mgr = region->mgr; > > fpga_region_unregister(region); > - fpga_mgr_put(region->mgr); > + fpga_mgr_put(mgr); > > return 0; > } > diff --git a/drivers/fpga/of-fpga-region.c b/drivers/fpga/of-fpga-region.c > index 35fabb8..052a134 100644 > --- a/drivers/fpga/of-fpga-region.c > +++ b/drivers/fpga/of-fpga-region.c > @@ -437,9 +437,10 @@ static int of_fpga_region_probe(struct platform_device *pdev) > static int of_fpga_region_remove(struct platform_device *pdev) > { > struct fpga_region *region = platform_get_drvdata(pdev); > + struct fpga_manager *mgr = region->mgr; > > fpga_region_unregister(region); > - fpga_mgr_put(region->mgr); > + fpga_mgr_put(mgr); > > return 0; > } > -- > 2.7.4 > Thanks, Moritz
On Tue, Sep 4, 2018 at 6:41 PM Moritz Fischer <moritz.fischer@ettus.com> wrote: Hi Moritz, > > Hi Alan, > > On Tue, Sep 4, 2018 at 2:22 PM, Alan Tull <atull@kernel.org> wrote: > > A couple drivers were accessing the region struct after it had been > > freed. Save off the pointer to the mgr before the region struct gets > > freed. > > > > Signed-off-by: Alan Tull <atull@kernel.org> > Acked-by: Moritz Fischer <mdf@kernel.org> Thanks! Alan
diff --git a/drivers/fpga/dfl-fme-region.c b/drivers/fpga/dfl-fme-region.c index 0b7e19c..51a5ac2 100644 --- a/drivers/fpga/dfl-fme-region.c +++ b/drivers/fpga/dfl-fme-region.c @@ -14,6 +14,7 @@ */ #include <linux/module.h> +#include <linux/fpga/fpga-mgr.h> #include <linux/fpga/fpga-region.h> #include "dfl-fme-pr.h" @@ -66,9 +67,10 @@ static int fme_region_probe(struct platform_device *pdev) static int fme_region_remove(struct platform_device *pdev) { struct fpga_region *region = dev_get_drvdata(&pdev->dev); + struct fpga_manager *mgr = region->mgr; fpga_region_unregister(region); - fpga_mgr_put(region->mgr); + fpga_mgr_put(mgr); return 0; } diff --git a/drivers/fpga/of-fpga-region.c b/drivers/fpga/of-fpga-region.c index 35fabb8..052a134 100644 --- a/drivers/fpga/of-fpga-region.c +++ b/drivers/fpga/of-fpga-region.c @@ -437,9 +437,10 @@ static int of_fpga_region_probe(struct platform_device *pdev) static int of_fpga_region_remove(struct platform_device *pdev) { struct fpga_region *region = platform_get_drvdata(pdev); + struct fpga_manager *mgr = region->mgr; fpga_region_unregister(region); - fpga_mgr_put(region->mgr); + fpga_mgr_put(mgr); return 0; }
A couple drivers were accessing the region struct after it had been freed. Save off the pointer to the mgr before the region struct gets freed. Signed-off-by: Alan Tull <atull@kernel.org> --- v2: no change in v2 of patchset --- drivers/fpga/dfl-fme-region.c | 4 +++- drivers/fpga/of-fpga-region.c | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-)