aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/fpga
diff options
context:
space:
mode:
authorAlan Tull <atull@kernel.org>2018-09-12 10:43:23 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-09-30 11:49:55 -0400
commit34bd283396af1f05c43fa64d51378d38affb1cf1 (patch)
tree51ba04c6fbe0a5afbf97589873b738d49aa2b8d6 /drivers/fpga
parent41e270f6898e7502be9fd6920ee0a108ca259d36 (diff)
fpga: do not access region struct after fpga_region_unregister
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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/fpga')
-rw-r--r--drivers/fpga/dfl-fme-region.c4
-rw-r--r--drivers/fpga/of-fpga-region.c3
2 files changed, 5 insertions, 2 deletions
diff --git a/drivers/fpga/dfl-fme-region.c b/drivers/fpga/dfl-fme-region.c
index 0b7e19c27c6d..51a5ac2293a7 100644
--- a/drivers/fpga/dfl-fme-region.c
+++ b/drivers/fpga/dfl-fme-region.c
@@ -14,6 +14,7 @@
14 */ 14 */
15 15
16#include <linux/module.h> 16#include <linux/module.h>
17#include <linux/fpga/fpga-mgr.h>
17#include <linux/fpga/fpga-region.h> 18#include <linux/fpga/fpga-region.h>
18 19
19#include "dfl-fme-pr.h" 20#include "dfl-fme-pr.h"
@@ -66,9 +67,10 @@ eprobe_mgr_put:
66static int fme_region_remove(struct platform_device *pdev) 67static int fme_region_remove(struct platform_device *pdev)
67{ 68{
68 struct fpga_region *region = dev_get_drvdata(&pdev->dev); 69 struct fpga_region *region = dev_get_drvdata(&pdev->dev);
70 struct fpga_manager *mgr = region->mgr;
69 71
70 fpga_region_unregister(region); 72 fpga_region_unregister(region);
71 fpga_mgr_put(region->mgr); 73 fpga_mgr_put(mgr);
72 74
73 return 0; 75 return 0;
74} 76}
diff --git a/drivers/fpga/of-fpga-region.c b/drivers/fpga/of-fpga-region.c
index 35fabb8083fb..052a1342ab7e 100644
--- a/drivers/fpga/of-fpga-region.c
+++ b/drivers/fpga/of-fpga-region.c
@@ -437,9 +437,10 @@ eprobe_mgr_put:
437static int of_fpga_region_remove(struct platform_device *pdev) 437static int of_fpga_region_remove(struct platform_device *pdev)
438{ 438{
439 struct fpga_region *region = platform_get_drvdata(pdev); 439 struct fpga_region *region = platform_get_drvdata(pdev);
440 struct fpga_manager *mgr = region->mgr;
440 441
441 fpga_region_unregister(region); 442 fpga_region_unregister(region);
442 fpga_mgr_put(region->mgr); 443 fpga_mgr_put(mgr);
443 444
444 return 0; 445 return 0;
445} 446}