From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Walle Date: Thu, 14 May 2020 20:50:50 +0200 Subject: [PATCH 2/4] efi_loader: check alignment in efi_add_memory_map() In-Reply-To: <8c868d16-402b-d010-3e67-4cc620e3e127@gmx.de> References: <20200514123831.30157-1-michael@walle.cc> <20200514123831.30157-3-michael@walle.cc> <8c868d16-402b-d010-3e67-4cc620e3e127@gmx.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Am 2020-05-14 20:35, schrieb Heinrich Schuchardt: > On 5/14/20 2:38 PM, Michael Walle wrote: >> The first argument has to be aligned with EFI_PAGE_SIZE. This >> alignment >> is already checked for external callers but it is not checked for >> internal callers. Unfortunately, most of the time the return value is >> not checked, so scream loud and clear. > > Why do you mention the return value here? most callers just ignore the return value. so if not aligned this will silently fail. >> >> Signed-off-by: Michael Walle >> --- >> lib/efi_loader/efi_memory.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c >> index fd79178da9..b56e19cb30 100644 >> --- a/lib/efi_loader/efi_memory.c >> +++ b/lib/efi_loader/efi_memory.c >> @@ -248,6 +248,9 @@ efi_status_t efi_add_memory_map(uint64_t start, >> uint64_t pages, int memory_type, >> EFI_PRINT("%s: 0x%llx 0x%llx %d %s\n", __func__, >> start, pages, memory_type, overlap_only_ram ? "yes" : "no"); >> >> + if (start & EFI_PAGE_MASK) >> + panic("%s: start not aligned\n", __func__); >> + > > Did you find any internal caller that has a problem? See next patch. > We do not want to increase code size. Mh, even within the efi_loader? Well I could do a if (start & EFI_PAGE_MASK) { debug("%s: start not aligned\n", __func__); return EFI_INVALID_PARAMETER; } but as I said, nobody checks the return value. -- -michael