diff options
Diffstat (limited to 'libfdisk/src/gpt.c')
| -rw-r--r-- | libfdisk/src/gpt.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c index 66520c51db..563c77073b 100644 --- a/libfdisk/src/gpt.c +++ b/libfdisk/src/gpt.c @@ -417,9 +417,13 @@ static inline int gpt_calculate_alternative_entries_lba( uint64_t esects = 0; int rc = gpt_calculate_sectorsof_entries(hdr, nents, &esects, cxt); - if (rc == 0) - *sz = cxt->total_sectors - 1ULL - esects; - return rc; + if (rc) + return rc; + if (cxt->total_sectors < 1ULL + esects) + return -ENOSPC; + + *sz = cxt->total_sectors - 1ULL - esects; + return 0; } static inline int gpt_calculate_last_lba( @@ -431,9 +435,13 @@ static inline int gpt_calculate_last_lba( uint64_t esects = 0; int rc = gpt_calculate_sectorsof_entries(hdr, nents, &esects, cxt); - if (rc == 0) - *sz = cxt->total_sectors - 2ULL - esects; - return rc; + if (rc) + return rc; + if (cxt->total_sectors < 2ULL + esects) + return -ENOSPC; + + *sz = cxt->total_sectors - 2ULL - esects; + return 0; } static inline int gpt_calculate_first_lba( @@ -3082,7 +3090,6 @@ static int gpt_reset_alignment(struct fdisk_context *cxt) uint64_t first, last; count_first_last_lba(cxt, &first, &last); - if (cxt->first_lba < first) cxt->first_lba = first; if (cxt->last_lba > last) |
