On Wed, Apr 23, 2025 at 04:09:10PM +0200, Marco Felsch wrote:
> -static __maybe_unused struct partition_desc 
> *efi_partition_create_table(struct block_device *blk)
> +static __maybe_unused struct partition_desc *
> +efi_partition_create_table(struct block_device *blk, sector_t gpt_location)
>  {
>       struct efi_partition_desc *epd = xzalloc(sizeof(*epd));
>       gpt_header *gpt;
>  
> +     if (gpt_location < 2) {
> +             pr_err("Invalid starting LBA (%llu) of array of partition 
> entries\n",
> +                    gpt_location);
> +             return ERR_PTR(-EINVAL);
> +     }
> +
>       partition_desc_init(&epd->pd, blk);
>  
>       epd->gpt = xzalloc(512);
> @@ -594,10 +601,10 @@ static __maybe_unused struct partition_desc 
> *efi_partition_create_table(struct b
>       gpt->header_size = cpu_to_le32(sizeof(*gpt));
>       gpt->my_lba = cpu_to_le64(1);
>       gpt->alternate_lba = cpu_to_le64(last_lba(blk));
> -     gpt->first_usable_lba = cpu_to_le64(34);
> +     gpt->first_usable_lba = cpu_to_le64(gpt_location + 32);

Since you are changing this default you should also check against
gpt->first_usable_lba in efi_partition_mkpart():

        if (start_lba < 34) {
                pr_err("invalid start LBA %lld, minimum is 34\n", start_lba);
                return -EINVAL;
        }

We should have done that from the start, but now that you are touching
it it's your turn ;)

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

Reply via email to