From: Faiz Abbas <faiz_abbas@ti.com>
Date: Wed, 4 Sep 2019 14:40:12 +0000 (+0530)
Subject: disk: part_dos: Allocate at least one block size for mbr
X-Git-Tag: v2025.01-rc5-pxa1908~2783^2~3
X-Git-Url: http://git.dujemihanovic.xyz/img/html/%7B%7B%20%28.OutputFormats.Get?a=commitdiff_plain;h=7aed3d380981565b5bb2810d5d13aad1ff994f1a;p=u-boot.git

disk: part_dos: Allocate at least one block size for mbr

The blk_dread() following the mbr allocation reads one block from the
device. This will lead to overflow if block size is greater than the
size of legacy_mbr. Fix this by allocating at least one block size.

Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
Acked-by: Alexey Brodkin <abrodkin@synopsys.com>
---

diff --git a/disk/part_dos.c b/disk/part_dos.c
index aae9d95906..8ddc13b50c 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -93,7 +93,8 @@ static int test_block_type(unsigned char *buffer)
 static int part_test_dos(struct blk_desc *dev_desc)
 {
 #ifndef CONFIG_SPL_BUILD
-	ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr, 1);
+	ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr,
+			DIV_ROUND_UP(dev_desc->blksz, sizeof(legacy_mbr)));
 
 	if (blk_dread(dev_desc, 0, 1, (ulong *)mbr) != 1)
 		return -1;