Check whether access is out of bounds of the partition and
return an error. This way there is no danger of esp. write
or erase outside of the confines of partition.

Signed-off-by: Marek Vasut <[email protected]>
---
Cc: AKASHI Takahiro <[email protected]>
Cc: Abdellatif El Khlifi <[email protected]>
Cc: Bin Meng <[email protected]>
Cc: Heinrich Schuchardt <[email protected]>
Cc: Joshua Watt <[email protected]>
Cc: Michal Suchanek <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Tobias Waldekranz <[email protected]>
---
 disk/disk-uclass.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/disk/disk-uclass.c b/disk/disk-uclass.c
index 32722cf9176..f262105375b 100644
--- a/disk/disk-uclass.c
+++ b/disk/disk-uclass.c
@@ -27,9 +27,17 @@
  */
 static int disk_blk_part_validate(struct udevice *dev, lbaint_t start, 
lbaint_t blkcnt)
 {
+       struct disk_part *part = dev_get_uclass_plat(dev);
+
        if (device_get_uclass_id(dev) != UCLASS_PARTITION)
                return -ENOSYS;
 
+       if (start >= part->gpt_part_info.size)
+               return -E2BIG;
+
+       if ((start + blkcnt) > part->gpt_part_info.size)
+               return -ERANGE;
+
        return 0;
 }
 
-- 
2.40.1

Reply via email to