nvmem: core: Print error on wrong bits DT property
authorMarkus Schneider-Pargmann <msp@baylibre.com>
Sat, 24 Feb 2024 11:45:16 +0000 (11:45 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 7 Mar 2024 20:21:53 +0000 (20:21 +0000)
The algorithms in nvmem core are built with the constraint that
bit_offset < 8. If bit_offset is greater the results are wrong. Print an
error if the devicetree 'bits' property is outside of the valid range
and abort parsing.

Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20240224114516.86365-12-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/nvmem/core.c

index eb357ac2e54a2a827ad07b9a073d3e76415a000f..2c6b99402df8a76011c2165fb8841ae2ff7fcc1f 100644 (file)
@@ -807,6 +807,11 @@ static int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_nod
                if (addr && len == (2 * sizeof(u32))) {
                        info.bit_offset = be32_to_cpup(addr++);
                        info.nbits = be32_to_cpup(addr);
+                       if (info.bit_offset >= BITS_PER_BYTE || info.nbits < 1) {
+                               dev_err(dev, "nvmem: invalid bits on %pOF\n", child);
+                               of_node_put(child);
+                               return -EINVAL;
+                       }
                }
 
                info.np = of_node_get(child);