nvmem: core: verify cell's raw_len
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Fri, 11 Apr 2025 11:22:47 +0000 (12:22 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Apr 2025 12:41:21 +0000 (14:41 +0200)
Check that the NVMEM cell's raw_len is a aligned to word_size. Otherwise
Otherwise drivers might face incomplete read while accessing the last
part of the NVMEM cell.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20250411112251.68002-10-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/nvmem/core.c

index 7872903c08a112f11618a5aa6a42ba505106ef6d..7b8c85f9e035cc9ce537c2905a7866383bda5b7f 100644 (file)
@@ -605,6 +605,18 @@ static int nvmem_cell_info_to_nvmem_cell_entry_nodup(struct nvmem_device *nvmem,
                return -EINVAL;
        }
 
+       if (!IS_ALIGNED(cell->raw_len, nvmem->word_size)) {
+               dev_err(&nvmem->dev,
+                       "cell %s raw len %zd unaligned to nvmem word size %d\n",
+                       cell->name ?: "<unknown>", cell->raw_len,
+                       nvmem->word_size);
+
+               if (info->raw_len)
+                       return -EINVAL;
+
+               cell->raw_len = ALIGN(cell->raw_len, nvmem->word_size);
+       }
+
        return 0;
 }