Re: [PATCH v2] efi: take size of partition entry from GPT header

From: kzak@xxxxxxxxxx
Date: Fri Sep 14 2018 - 07:07:11 EST


On Fri, Sep 14, 2018 at 09:01:48AM +0000, David Laight wrote:
> From: Eugene Korenevsky
> > Sent: 13 September 2018 20:48
> >
> > > I suspect you also need a sanity check that the value isn't too small
> > > or stupidly large.
> >
> > What would be the criterion for too large entries?
>
> Anything larger than the maximum size of the full GPT table
> would be a start.
> Even something like 64k would stop later calculations going wrong.
> I presume there is a check elsewhere that the GPT table entries
> are all inside the disk area that was read?

is_gpt_valid() already contains

pt_size = (u64)le32_to_cpu((*gpt)->num_partition_entries) *
le32_to_cpu((*gpt)->sizeof_partition_entry);
if (pt_size > KMALLOC_MAX_SIZE)
pr_debug("GUID Partition Table is too large: %llu > %lu bytes\n",
(unsigned long long)pt_size, KMALLOC_MAX_SIZE);
goto fail;
}

I guess it good enough for sanity check.

If you want to be really paranoid than you can also check that array
is possible to store to the expected area on the disk:

pt_size <= (gpt->first_usable_lba - gpt->partition_entry_lba)

Note that is_gpt_valid() already compares the another LBAs with the
device size to be sure GPT is no out of reality...

Karel


--
Karel Zak <kzak@xxxxxxxxxx>
http://karelzak.blogspot.com