Re: [PATCH] efivarfs: Iterate variables with increasing name buffer sizes

From: Tim Schumacher
Date: Sat Apr 13 2024 - 06:47:51 EST


On 24.01.24 22:25, Peter Jones wrote:
On Tue, Jan 23, 2024 at 12:33 PM Tim Schumacher <timschumi@xxxxxx> wrote:

On 23.01.24 15:09, Ard Biesheuvel wrote:
On Tue, 23 Jan 2024 at 14:55, Tim Schumacher <timschumi@xxxxxx> wrote:

I'd rather avoid introducing deviations from the specifications on the
kernel side as well.

Which specification would this deviate from?

The preexisting comment claims "Per EFI spec", and it appears that I got
mislead by that. Neither the UEFI specification, nor the newest revision
of the EFI specification (which I guess is what would have been current
back in 2004, when this comment was introduced) seem to make any mention
of a maximum length for the variable name.

Curiously, I can't find it in the 1.02 spec (the oldest I can find)
either. When I inherited efibootmgr around 2013, this was a
limitation there, but I don't see anything in that tree that claims
it's a spec limitation either. My suspicion is this is a former
Itanium firmware limit that got promoted to "the spec says" by word of
mouth, or was in some very early ia64 implementation spec.

In case anyone is still curious about this, I managed to track down where
the supposed limit actually came from.

The efivarfs documentation claims that "The old sysfs EFI variables code only
supported variables of up to 1024 bytes. This limitation existed in version
0.99 of the EFI specification, but was removed before any full releases."

With some effort I managed to track down a copy of EFI v0.99 [1], which
indeed says the following:

"The size of the VariableName, including the Unicode Null in bytes plus the
DataSize is limited to a maximum size of 1024 bytes."

This note was there at least in version 0.92 and 0.99, and gone in at least
version 1.02. I haven't been able to find a copy of version 1.01, but it most
likely never even existed online, given that 1.02 happened only 12 days later
(and for the sole reason of "legal and trademarking requirements").
The EFI 0.99 errata (which might have included more details) sadly doesn't seem
to have been backed up anywhere by third-parties.

Tim

[1] Searching for "EFISpec_V099" on your preferred search engine should
find it. I doubt that Intel will care about copyright assignments for
feedback on 0.99 now, but the agreement prompt sadly prevented the Web
Archive from reaching it.