diff mbox series

[U-Boot] disk: part_dos: Allocate at least one block size for mbr

Message ID 20190904144012.26829-1-faiz_abbas@ti.com
State Accepted
Commit 7aed3d380981565b5bb2810d5d13aad1ff994f1a
Delegated to: Tom Rini
Headers show
Series [U-Boot] disk: part_dos: Allocate at least one block size for mbr | expand

Commit Message

Faiz Abbas Sept. 4, 2019, 2:40 p.m. UTC
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>
---
 disk/part_dos.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Alexey Brodkin Sept. 4, 2019, 4:59 p.m. UTC | #1
Hi Faiz,

> -----Original Message-----
> From: Faiz Abbas <faiz_abbas@ti.com>
> Sent: Wednesday, September 4, 2019 5:40 PM
> To: u-boot@lists.denx.de
> Cc: trini@konsulko.com; Alexey Brodkin <abrodkin@synopsys.com>; paulemge@forallsecure.com;
> faiz_abbas@ti.com
> Subject: [PATCH] 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>
Tom Rini Sept. 20, 2019, 2:49 p.m. UTC | #2
On Wed, Sep 04, 2019 at 08:10:12PM +0530, Faiz Abbas wrote:

> 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>

Applied to u-boot/master, thanks!
diff mbox series

Patch

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;