| From 9a188eb126aa7bf27077ee46fcb914898d6fc281 Mon Sep 17 00:00:00 2001 |
| From: Viresh Kumar <viresh.kumar@linaro.org> |
| Date: Fri, 15 Mar 2013 14:18:20 +0530 |
| Subject: DMA: OF: Check properties value before running be32_to_cpup() on it |
| |
| From: Viresh Kumar <viresh.kumar@linaro.org> |
| |
| commit 9a188eb126aa7bf27077ee46fcb914898d6fc281 upstream. |
| |
| In of_dma_controller_register() routine we are calling of_get_property() as an |
| parameter to be32_to_cpup(). In case the property doesn't exist we will get a |
| crash. |
| |
| This patch changes this code to check if we got a valid property first and then |
| runs be32_to_cpup() on it. |
| |
| Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> |
| Signed-off-by: Vinod Koul <vinod.koul@intel.com> |
| Signed-off-by: Robert Richter <robert.richter@calxeda.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/dma/of-dma.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/dma/of-dma.c |
| +++ b/drivers/dma/of-dma.c |
| @@ -93,6 +93,7 @@ int of_dma_controller_register(struct de |
| { |
| struct of_dma *ofdma; |
| int nbcells; |
| + const __be32 *prop; |
| |
| if (!np || !of_dma_xlate) { |
| pr_err("%s: not enough information provided\n", __func__); |
| @@ -103,8 +104,11 @@ int of_dma_controller_register(struct de |
| if (!ofdma) |
| return -ENOMEM; |
| |
| - nbcells = be32_to_cpup(of_get_property(np, "#dma-cells", NULL)); |
| - if (!nbcells) { |
| + prop = of_get_property(np, "#dma-cells", NULL); |
| + if (prop) |
| + nbcells = be32_to_cpup(prop); |
| + |
| + if (!prop || !nbcells) { |
| pr_err("%s: #dma-cells property is missing or invalid\n", |
| __func__); |
| kfree(ofdma); |