From patchwork Sun Jun 25 18:45:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 780490 X-Patchwork-Delegate: agraf@suse.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3wwh3S71vkz9s4s for ; Mon, 26 Jun 2017 04:46:11 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 9147DC21D75; Sun, 25 Jun 2017 18:46:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id BF589C21C2A; Sun, 25 Jun 2017 18:46:00 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 11AA1C21C2A; Sun, 25 Jun 2017 18:45:59 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by lists.denx.de (Postfix) with ESMTPS id B4478C21C26 for ; Sun, 25 Jun 2017 18:45:58 +0000 (UTC) Received: from localhost.localdomain ([88.152.145.149]) by mail.gmx.com (mrgmx002 [212.227.17.190]) with ESMTPSA (Nemesis) id 0M7Hao-1deGrD1oL0-00x5Cl; Sun, 25 Jun 2017 20:45:57 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Sun, 25 Jun 2017 20:45:36 +0200 Message-Id: <20170625184536.2061-1-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.11.0 X-Provags-ID: V03:K0:Vr96ktj8Cuxk3+PLfnNoPM3VcRpwZTAOEihdgJAo+r0wTrQNzke QIxkifZNaMa37oBKjshXdQGvQ0gZPE+GQY6Yv8gHiEq6hR6pg0TVH4R3+Q6apDtfKnWDq9d A0yMfSe36KvH0TDy3aTP9XbqbVvYYJUknGRvb4De7sh89YijNmpLNJNYTnA05Oxqo9jgZtc i9dev/wk9GyR3kxX7Q41Q== X-UI-Out-Filterresults: notjunk:1; V01:K0:twaCfqGLuW0=:LCNafj/fma+9cJRynWXrWp aOYvn7kyEyfOK4x3W+0c92o6d3oS2AfFZYx/sREz5R7YBzHWk9VCKhHCLaG2nZRV7kaqWiWmc +lSiqEEHiv704pjv+Ugo2U4Hb4q7snSd4cPbKVYH7zxrn5zwHV6yZaLK/d5cYQj/iND/X0j1h swkw+CWQqp+tQwV1DxeUvKD8Y6Sg0n6N3C0MsPq82KOS8Nrhv9Qb7ZIMxZKi30YJEWGhnD43M QVw/CLxL2X6ytfCkiOWWlUHqk5c12LvZKjZsLsK/P/6mbIuM9XzBiMIHmKiVNUuLgbzaOlJPF qbL3H7EpZ9i/U6y0SLdT5WW61lbS9Ow4am4k3o3tJQmRYoV1N2e17Ic6mwbo9E/u9hKZNR0Og nn2pPyVjdu2pfypnY4JMFXKefIOMiw/Aa/mICR7w4k8hI1tRgjCDANLrruDqEorevSHUdEV9W XTBRyFptrwVMF4atKGXTwbnUL4D0ZNPmXGdLgK8CCfojAP5pbkMity1ufEmciej81F/+HDyVT JR1/dgjcc7mnfjyJSDELM3A/qrNET5dJigMigAIUlUxq8nnj1H5aLMLIbW3n0c+tDoiOPaGjU 6mMxxU1r1Zvagft+QTswEhDIptA4B+mG19QBcB6KoSXSTMel4t/PRZQ7e63k4P33Oyu6QI5cG pPn84WDpLG5AiqDd+7CEPqIOL3LYdyd/y/eJi7rbA5RjgF4npaHQNjPN/eQHhS6PTCv2pNoAb 0LHQ9D6ZHfq8OE1ee0J5OcRxqKcG8p1gAJYZi1gT0f5e0FvsgYIFIkbDPhc= Cc: u-boot@lists.denx.de, Heinrich Schuchardt Subject: [U-Boot] [PATCH 1/1] efi_loader: abort on unsupported relocation type X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" If a relocation type is not supported loading the EFI binary should be aborted. Writing a message only is insufficient. Signed-off-by: Heinrich Schuchardt --- lib/efi_loader/efi_image_loader.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/efi_loader/efi_image_loader.c b/lib/efi_loader/efi_image_loader.c index 3262d76bca..bc8e04d6d9 100644 --- a/lib/efi_loader/efi_image_loader.c +++ b/lib/efi_loader/efi_image_loader.c @@ -26,7 +26,7 @@ efi_status_t EFIAPI efi_return_handle(void *handle, efi_guid_t *protocol, return EFI_SUCCESS; } -static void efi_loader_relocate(const IMAGE_BASE_RELOCATION *rel, +static efi_status_t efi_loader_relocate(const IMAGE_BASE_RELOCATION *rel, unsigned long rel_size, void *efi_reloc) { const IMAGE_BASE_RELOCATION *end; @@ -63,11 +63,13 @@ static void efi_loader_relocate(const IMAGE_BASE_RELOCATION *rel, default: printf("Unknown Relocation off %x type %x\n", offset, type); + return EFI_LOAD_ERROR; } relocs++; } rel = (const IMAGE_BASE_RELOCATION *)relocs; } + return EFI_SUCCESS; } void __weak invalidate_icache_all(void) @@ -171,7 +173,11 @@ void *efi_load_pe(void *efi, struct efi_loaded_image *loaded_image_info) } /* Run through relocations */ - efi_loader_relocate(rel, rel_size, efi_reloc); + if (EFI_SUCCESS != efi_loader_relocate(rel, rel_size, efi_reloc)) { + efi_free_pages((uint64_t) efi_reloc, + (virt_size + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT); + return NULL; + } /* Flush cache */ flush_cache((ulong)efi_reloc,