summaryrefslogtreecommitdiff
path: root/disk
diff options
context:
space:
mode:
authorFaiz Abbas <faiz_abbas@ti.com>2019-09-04 17:40:12 +0300
committerTom Rini <trini@konsulko.com>2019-09-19 19:54:29 +0300
commit7aed3d380981565b5bb2810d5d13aad1ff994f1a (patch)
tree06527700b485fdc29816ce06ed8e6df230431ffb /disk
parentfd75bf7bfa654420ecfd3aff5d91a2972f55ecc1 (diff)
downloadu-boot-7aed3d380981565b5bb2810d5d13aad1ff994f1a.tar.xz
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>
Diffstat (limited to 'disk')
-rw-r--r--disk/part_dos.c3
1 files changed, 2 insertions, 1 deletions
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;