On Fri, Mar 19, 2021 at 03:27:00PM +0100, Ard Biesheuvel wrote: > On Thu, 18 Mar 2021 at 22:44, Martin Radev <martin.b.ra...@gmail.com> wrote: > > > > The CommandLine and InitrdData may be set to NULL if the provided > > size is too large. Because the zero page is mapped, this would not > > cause an immediate crash but can lead to memory corruption instead. > > This patch just adds validation and returns error if either allocation > > has failed. > > > > Ref: > > https://github.com/martinradev/edk2/commit/6c0ce748b97393240c006e24b73652f30e597a05 > > > > Signed-off-by: Martin Radev <martin.b.ra...@gmail.com> > > This seems reasonable to me. > > Acked-by: Ard Biesheuvel <a...@kernel.org> > > > --- > > OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c | 11 +++++++++++ > > 1 file changed, 11 insertions(+) > > > > diff --git a/OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c > > b/OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c > > index 931553c0c1..b983c4d7d0 100644 > > --- a/OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c > > +++ b/OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c > > @@ -161,6 +161,12 @@ QemuLoadLegacyImage ( > > LoadedImage->CommandLine = LoadLinuxAllocateCommandLinePages ( > > EFI_SIZE_TO_PAGES ( > > LoadedImage->CommandLineSize)); > > + > > + if (LoadedImage->CommandLine == NULL) { > > + DEBUG ((DEBUG_ERROR, "Unable to allocate memory for kernel command > > line!\n")); > > + Status = EFI_OUT_OF_RESOURCES; > > + goto FreeImage; > > + } > > QemuFwCfgSelectItem (QemuFwCfgItemCommandLineData); > > QemuFwCfgReadBytes (LoadedImage->CommandLineSize, > > LoadedImage->CommandLine); > > } > > @@ -178,6 +184,11 @@ QemuLoadLegacyImage ( > > LoadedImage->InitrdData = LoadLinuxAllocateInitrdPages ( > > LoadedImage->SetupBuf, > > EFI_SIZE_TO_PAGES > > (LoadedImage->InitrdSize)); > > + if (LoadedImage->InitrdData == NULL) { > > + DEBUG ((DEBUG_ERROR, "Unable to allocate memory for initrd!\n")); > > + Status = EFI_OUT_OF_RESOURCES; > > + goto FreeImage; > > + } > > DEBUG ((DEBUG_INFO, "Initrd size: 0x%x\n", > > (UINT32)LoadedImage->InitrdSize)); > > DEBUG ((DEBUG_INFO, "Reading initrd image ...")); > > -- > > 2.17.1 > >
Thanks. I have a curiousity question: Is there a good reason the zero page is kept mapped? IMO, it makes sense to have the first page unmapped to avoid cases when some piece of code returns NULL as a failure to an allocation, but then later code uses it by mistake. Unmapping it could be a security hardening. -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#73050): https://edk2.groups.io/g/devel/message/73050 Mute This Topic: https://groups.io/mt/81445621/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-