Commit b6f58bfd6d2ce35360d3993be8d07e494e33021e

Authored by Mario Six
Committed by Simon Glass
1 parent 9b07609563

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)