| From 3ec754410cb3e931a6c4920b1a150f21a94a2bf4 Mon Sep 17 00:00:00 2001 |
| From: Tobias Wolf <dev-NTEO@vplace.de> |
| Date: Wed, 23 Nov 2016 10:40:07 +0100 |
| Subject: of: Add check to of_scan_flat_dt() before accessing initial_boot_params |
| |
| From: Tobias Wolf <dev-NTEO@vplace.de> |
| |
| commit 3ec754410cb3e931a6c4920b1a150f21a94a2bf4 upstream. |
| |
| An empty __dtb_start to __dtb_end section might result in |
| initial_boot_params being null for arch/mips/ralink. This showed that the |
| boot process hangs indefinitely in of_scan_flat_dt(). |
| |
| Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de> |
| Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Cc: linux-mips@linux-mips.org |
| Patchwork: https://patchwork.linux-mips.org/patch/14605/ |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| Signed-off-by: Amit Pundir <amit.pundir@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/of/fdt.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/of/fdt.c |
| +++ b/drivers/of/fdt.c |
| @@ -585,9 +585,12 @@ int __init of_scan_flat_dt(int (*it)(uns |
| const char *pathp; |
| int offset, rc = 0, depth = -1; |
| |
| - for (offset = fdt_next_node(blob, -1, &depth); |
| - offset >= 0 && depth >= 0 && !rc; |
| - offset = fdt_next_node(blob, offset, &depth)) { |
| + if (!blob) |
| + return 0; |
| + |
| + for (offset = fdt_next_node(blob, -1, &depth); |
| + offset >= 0 && depth >= 0 && !rc; |
| + offset = fdt_next_node(blob, offset, &depth)) { |
| |
| pathp = fdt_get_name(blob, offset, NULL); |
| if (*pathp == '/') |