Commit b6f58bfd6d2ce35360d3993be8d07e494e33021e
Committed by
Simon Glass
1 parent
9b07609563
Exists in
smarc_8mq_lf_v2020.04
and in
11 other branches
regmap: Improve error handling
ofnode_read_simple_addr_cells may fail and return a negative error code. Check for this when initializing regmaps. Also check if both_len is zero, since this is perfectly possible, and would lead to a division-by-zero further down the line. Reviewed-by: Anatolij Gustschin <agust@denx.de> Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Mario Six <mario.six@gdsys.cc>
Showing 1 changed file with 17 additions and 0 deletions Side-by-side Diff
drivers/core/regmap.c
... | ... | @@ -67,8 +67,25 @@ |
67 | 67 | struct resource r; |
68 | 68 | |
69 | 69 | addr_len = ofnode_read_simple_addr_cells(ofnode_get_parent(node)); |
70 | + if (addr_len < 0) { | |
71 | + debug("%s: Error while reading the addr length (ret = %d)\n", | |
72 | + ofnode_get_name(node), addr_len); | |
73 | + return addr_len; | |
74 | + } | |
75 | + | |
70 | 76 | size_len = ofnode_read_simple_size_cells(ofnode_get_parent(node)); |
77 | + if (size_len < 0) { | |
78 | + debug("%s: Error while reading the size length: (ret = %d)\n", | |
79 | + ofnode_get_name(node), size_len); | |
80 | + return size_len; | |
81 | + } | |
82 | + | |
71 | 83 | both_len = addr_len + size_len; |
84 | + if (!both_len) { | |
85 | + debug("%s: Both addr and size length are zero\n", | |
86 | + ofnode_get_name(node)); | |
87 | + return -EINVAL; | |
88 | + } | |
72 | 89 | |
73 | 90 | len = ofnode_read_size(node, "reg"); |
74 | 91 | if (len < 0) |