diff options
author | Faiz Abbas | 2019-09-04 20:10:12 +0530 |
---|---|---|
committer | Tom Rini | 2019-09-19 12:54:29 -0400 |
commit | 7aed3d380981565b5bb2810d5d13aad1ff994f1a (patch) | |
tree | 06527700b485fdc29816ce06ed8e6df230431ffb | |
parent | fd75bf7bfa654420ecfd3aff5d91a2972f55ecc1 (diff) |
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>
-rw-r--r-- | disk/part_dos.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/disk/part_dos.c b/disk/part_dos.c index aae9d959063..8ddc13b50c6 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; |