From patchwork Sat May 4 08:36:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1095160 X-Patchwork-Delegate: xypron.glpk@gmx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="XAzZgftb"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44x2S23XyJz9s7T for ; Sat, 4 May 2019 18:37:22 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 179F0C21DD7; Sat, 4 May 2019 08:37:20 +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, T_DKIM_INVALID 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 B17D1C21DB3; Sat, 4 May 2019 08:36:49 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A90E8C21D72; Sat, 4 May 2019 08:36:47 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by lists.denx.de (Postfix) with ESMTPS id 21583C21BE5 for ; Sat, 4 May 2019 08:36:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1556959005; bh=9PAH8IqOf1Tb584i6qFdEWzvRXwxJova9fqncPBgZak=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=XAzZgftblc46767VCkOdSc0SWsuPNlbx8k7EepYGJFRbVNRDfBTkU3LgEcWoyjyvq yAxmI+i2A8EZQKkCgTiEO/Q7iP0QTYDEa+2Xm+yvAP+H7NRQNcl0hrZUPEEqoCHJvZ 3sQwF5TlpTX0aQG6NiaD5L9OFiuI8ARgdO1QTVao= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from LT02.fritz.box ([84.118.159.3]) by mail.gmx.com (mrgmx102 [212.227.17.174]) with ESMTPSA (Nemesis) id 0Mhej1-1h9rTj3lJL-00MptE; Sat, 04 May 2019 10:36:45 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Sat, 4 May 2019 10:36:33 +0200 Message-Id: <20190504083636.24420-2-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190504083636.24420-1-xypron.glpk@gmx.de> References: <20190504083636.24420-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:vtU+28F1uThbHKnHslkQcXQsbN2kD7QW3dy0ORNOl7iVA36z/r7 9frRBZkibUj2g2t+b5kaJ2kd3HFmJnPXqoOqcjyOFbQ+HU5uTtuIIhxI5xxMglE/EgNRm8l 0vpzdnDSEoSOwOcR1Ri9sp/oebWwEn4fDbGEUeYADI8JG2JAKi5iSNJanCLRSUdrUCBhRqF zVBVKoaSjjdonFw5gb0JA== X-UI-Out-Filterresults: notjunk:1; V03:K0:BpeSwQkHL64=:yEjTdWe24/3/CwnANY9ewI Jtf1VFdW86JSn+vYvRkMqjvOV7TdYEzcHW/++9g7kKz+X+X1Katz177LsyUoLwKMr2aDnW0pk uvQgNUilqY4ycbALURoXNxC0ZwGnnpmq2XS/n6QqBiu7jYr8qBJvdTw2lPp25GiVRXzUJpklB mFlyYP9ySEOKYJUUV4dXT9H4sNgGBLfmnh51uT9Ba3mEm0Fh0jnfUBZQF+2KmfNTytiYaZxlT xvh/+WgaVqGU0IwXx88xMiMQ6o2X3kD59U9ZWTQw8kYHSkzQGHTejwNXjjMgdHwazBVuGbM2E UoU2EzxMUJl0dbqZpj8IWDWUuJD3A3YdA4FCabB9YowNoYcVjUnOspogRm1F8cMTfIdJdw7Uq oXQzL+qqk3GMp/9csWjPevENkfQDTtM6L0VF5XsEk3m+RmUw/YESReJn4MZ4td750l1xe/scX JB0ZbDHrIeJ3nuOxNO/LQx0ety15m//9uMigguxZJPMm7cSUaVuDlxwO1kiaasDdikSN1wAUp waKz0bZnnA050OSwAo8BYiJ2C0tTvlxEGvLUYtZhwCwoPdLIpz1f1mmSlnE26JATFqh8SrlXW cAi+uXDS8fJQQKlS6igMqGEIwnh7gU6kA9Z/gY8wPFFvD0h0BMxeFkWJSoT03r6wNonm47HWI KW7ugYhmUsk+Xbqk1up4xlzxWT5rHWxE6qdbLTIcp0QTGD0wkntRT0b+1SdVsnGSwduCkqeUo 5jjTkhykQxv8328IqFnUASt/2mCliE2PdfI8pdE/8letnJy3DJ7aeXup/ivI7WHY4UxiBsDFr bX6HJja7ThNmHbqFoSWRwwv4d6a2R/hx3ZQvmS+N3qpZmK53/3BOP/8JzE1WbC8alxWXCckE/ GVdiu7HRktd6w40OXpHVA2ErmULk1XEeXukQvDuOHqeXzWenrAAcVGByTG1Fml Cc: Heinrich Schuchardt , u-boot@lists.denx.de Subject: [U-Boot] [PATCH 1/4] efi_loader: mark started images 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: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" In UnloadImage() we need to know if an image is already started. Add a field to the handle structure identifying loaded and started images. Signed-off-by: Heinrich Schuchardt --- include/efi_loader.h | 13 +++++++++++++ lib/efi_loader/efi_boottime.c | 2 ++ 2 files changed, 15 insertions(+) -- 2.20.1 diff --git a/include/efi_loader.h b/include/efi_loader.h index 3fd9901d66..c2a449e5b6 100644 --- a/include/efi_loader.h +++ b/include/efi_loader.h @@ -182,6 +182,18 @@ struct efi_handler { struct list_head open_infos; }; +/** + * enum efi_object_type - type of EFI object + * + * In UnloadImage we must be able to identify if the handle relates to a + * started image. + */ +enum efi_object_type { + EFI_OBJECT_TYPE_UNDEFINED = 0, + EFI_OBJECT_TYPE_LOADED_IMAGE, + EFI_OBJECT_TYPE_STARTED_IMAGE, +}; + /** * struct efi_object - dereferenced EFI handle * @@ -204,6 +216,7 @@ struct efi_object { struct list_head link; /* The list of protocols */ struct list_head protocols; + enum efi_object_type type; }; /** diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 3ed08e7c37..dc444fccf6 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -1554,6 +1554,7 @@ efi_status_t efi_setup_loaded_image(struct efi_device_path *device_path, free(info); return EFI_OUT_OF_RESOURCES; } + obj->header.type = EFI_OBJECT_TYPE_LOADED_IMAGE; /* Add internal object to object list */ efi_add_handle(&obj->header); @@ -2678,6 +2679,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, } current_image = image_handle; + image_obj->header.type = EFI_OBJECT_TYPE_STARTED_IMAGE; EFI_PRINT("Jumping into 0x%p\n", image_obj->entry); ret = EFI_CALL(image_obj->entry(image_handle, &systab)); From patchwork Sat May 4 08:36:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1095161 X-Patchwork-Delegate: xypron.glpk@gmx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="PfgNV9Ey"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44x2TK1n6xz9s6w for ; Sat, 4 May 2019 18:38:29 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id CA04DC21DA6; Sat, 4 May 2019 08:37:48 +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, T_DKIM_INVALID 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 3AF8AC21DEC; Sat, 4 May 2019 08:36:50 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 038E8C21D72; Sat, 4 May 2019 08:36:47 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by lists.denx.de (Postfix) with ESMTPS id 301DBC21C2C for ; Sat, 4 May 2019 08:36:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1556959005; bh=/rxph5GNf9/c3eQTNmiGqUvrrdPP+WHsn6/3Zy4T/4U=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=PfgNV9Eyofjg0SW7Ki0St7Lrb2f6m9nW1haRxdFLPMNIN3XRolD1dwhXAriush/PS g9E66729Yi+JveL/+m7xpdBcm71MghTHyw6gC8OTD/bSBejcR8KRiiUtKr0ac314Ye FO9VucxiWolJkCYNsLUNAMJMFLAEW4lwN4iruKf8= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from LT02.fritz.box ([84.118.159.3]) by mail.gmx.com (mrgmx102 [212.227.17.174]) with ESMTPSA (Nemesis) id 0LjdS8-1glZX30dzc-00bd0p; Sat, 04 May 2019 10:36:45 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Sat, 4 May 2019 10:36:34 +0200 Message-Id: <20190504083636.24420-3-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190504083636.24420-1-xypron.glpk@gmx.de> References: <20190504083636.24420-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:SgWYZAiGYMcuVhXQRJcwQ/YENmngIOhUwx760N/YAtfvDnIU7qo Xb260fDu0T0uRfebbwJ0WqLYbRbHoE9quEJSt5eqEtetCibNBCWA3wh+DcxjBkZC00fozvW gIHGsa5t120XWus/Ve76o1JJMO//5F2IY55pAJZIbF4fsP4Rr3rfg9RlpnwZK0XxHpVjucQ gqcS4scv+N8IEAbfog41Q== X-UI-Out-Filterresults: notjunk:1; V03:K0:MJs3dBPmO1o=:1I8glUsZiOGT52lVWPVmiL 2SoEoKm4MbQh6SqQzU4HaSHWnYpD3yyHg7jKLfQ3cICmGSECyFWwHAFqGa+3a2wQ1bNlZtTs1 Ly2J1HHMF7ZMPpBT7IRaCK4UDWgqg9HVhA7yqG2n85IO2g54bJToY2sM6f+1xk/BndnDbLmsN ZIBE/WZYdo5XNUgJf75e/u6hEKr0I+I+8WcmBNk1gZRuw1RRxSeMHU1LD0rcfuuEZUFu79Z0J CT51EJXkgsI9iTEypMfsjgM/3sThaj5elxHqoV7ddlLuT9krUH31WZUr6WdiK+Qq+vFuQ1Yq5 8xfA3s4fmkrkckHWDLeokjqvu74m6xoIdir6GA4cjqEfmWGt2iDrE5mxBvrX04zLyAAm8r65c FjVXaCZzrP/OL6Cq8mstvvmuETEqf+58LKcAkAT+LC0Ps5aRPY4muB2l5dneNPqQRKMJpKGk+ RmMInXhRJi9oZjfL8FZtbCWD/b4IVUq4d6gC9a30o5DRuqmqixX+4hfdF19Gzhpb7ZUe6cS6l 7M4KJ9G6IzH8zsfXdmP25+q6SPClOxWsrqIKJ2fyFT6Cfm8px/6+ifAqOsqpBSG//bZZAlgWh ywkiT9RRDU2BKp5EJzOiEpqFN/QmnvlzfR8NQrW3oOpdsXIM5kRrMwhzPmjfy9DfWYhR1jj4o qUZxiBbW0AW10TFBtVaLvyGyLjEZxDo6WJeqMHJYzBLCF+qm7NhzWyhxvoXrbpB6Iyjd/nOf9 jwWesZeHJfuE7pT+uh2rnX6Xs4sFk+tm934WkmOlVEsPZnTGc6LktvQdkT4dyG2m8BkQdErWW 7+bwftanF/RsvVNtpDxuYNU8GSBPw8j3DOUdAStYaPpuvYwPpuIMKItIQ2CYU7upZ1OZaTLwO hwrDRIMh6FZ/4Er+0cxJFmTCfsF4SBhXUG1XSrpw7u7Lyx7Y5rrh2v/VQE8QeG Cc: Heinrich Schuchardt , u-boot@lists.denx.de Subject: [U-Boot] [PATCH 2/4] efi_loader: move efi_unload_image() down in source 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: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Move efi_unload_image() down in source to avoid forward declaration in following page. Signed-off-by: Heinrich Schuchardt --- lib/efi_loader/efi_boottime.c | 46 +++++++++++++++++------------------ 1 file changed, 23 insertions(+), 23 deletions(-) -- 2.20.1 diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index dc444fccf6..2992af269a 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -1744,29 +1744,6 @@ error: return EFI_EXIT(ret); } -/** - * efi_unload_image() - unload an EFI image - * @image_handle: handle of the image to be unloaded - * - * This function implements the UnloadImage service. - * - * See the Unified Extensible Firmware Interface (UEFI) specification for - * details. - * - * Return: status code - */ -efi_status_t EFIAPI efi_unload_image(efi_handle_t image_handle) -{ - struct efi_object *efiobj; - - EFI_ENTRY("%p", image_handle); - efiobj = efi_search_obj(image_handle); - if (efiobj) - list_del(&efiobj->link); - - return EFI_EXIT(EFI_SUCCESS); -} - /** * efi_exit_caches() - fix up caches for EFI payloads if necessary */ @@ -2692,6 +2669,29 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, return EFI_CALL(systab.boottime->exit(image_handle, ret, 0, NULL)); } +/** + * efi_unload_image() - unload an EFI image + * @image_handle: handle of the image to be unloaded + * + * This function implements the UnloadImage service. + * + * See the Unified Extensible Firmware Interface (UEFI) specification for + * details. + * + * Return: status code + */ +efi_status_t EFIAPI efi_unload_image(efi_handle_t image_handle) +{ + struct efi_object *efiobj; + + EFI_ENTRY("%p", image_handle); + efiobj = efi_search_obj(image_handle); + if (efiobj) + list_del(&efiobj->link); + + return EFI_EXIT(EFI_SUCCESS); +} + /** * efi_update_exit_data() - fill exit data parameters of StartImage() * From patchwork Sat May 4 08:36:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1095162 X-Patchwork-Delegate: xypron.glpk@gmx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="Chtuq1Uu"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44x2TN1Rnfz9s6w for ; Sat, 4 May 2019 18:38:32 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id E918AC21DFB; Sat, 4 May 2019 08:38:02 +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, T_DKIM_INVALID 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 C4BC5C21DFA; Sat, 4 May 2019 08:36:53 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 4DDC7C21DF9; Sat, 4 May 2019 08:36:50 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by lists.denx.de (Postfix) with ESMTPS id 6CACAC21CB1 for ; Sat, 4 May 2019 08:36:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1556959005; bh=QKgBM/5WnUc8p8+MUthxmDtBpANZLVtJZ5oq02PT6w0=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=Chtuq1UuewFIgrM2KywX6PDsl4EI0Bn/GUqsHsMD7Iwf5979WkT+KAQPCZVcbNwcL OHlo89HOECbmapXKgXHf9EYAFzenmLPVFJOm82UjcfoaIJ1EHXEwQC+EidpBgglDUL SVNugU+z8AWnVIfVtfJHDZH87CKjqrJLxQ9vWi08= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from LT02.fritz.box ([84.118.159.3]) by mail.gmx.com (mrgmx102 [212.227.17.174]) with ESMTPSA (Nemesis) id 0Ld3t6-1gwcA91kjA-00iGqN; Sat, 04 May 2019 10:36:45 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Sat, 4 May 2019 10:36:35 +0200 Message-Id: <20190504083636.24420-4-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190504083636.24420-1-xypron.glpk@gmx.de> References: <20190504083636.24420-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:df0rVfL8QgB2A+FkDhBWneXE7E/0Ug6HAXXDbkHHGX6al9fuDFU NiUcJsFjabyxhRRSzSdAfoeYBfXHaNhdXGe1jj339Jcqg7VK8kQtl3HCtVyq8H/0NDTzL38 QTd9hXzxDE3mk7XhbYNGNZyEfjq8pv43hysoSLaYuBnQrg4vn3mcV2vhMiGhKgdrBu4fweW VxL84BS0usemrVVvBM5vA== X-UI-Out-Filterresults: notjunk:1; V03:K0:eQ/iHC1VNg0=:0v1ABkMaIf+kWcfg+DUFbX OPrTU+TM3vDMKAnzV3TJJM3TsxucQxI1K0RVMbPJnBhtXvP+v5osL9Cl2Zht/DeiH6hI34TX8 H3nvm90NclJUgJ/uOjDb0Jbl0cwq7uJsf0PRARMbbOGqAZLYBvsAnH4T+doK+M4KOzKEyrukq glnRYSF9YwZoAml4xENTUnaUHtGKW05s8dCZs/0QH4orHncP7otW+xlvmFgjdsVRNQ7D483vt JFDUqRXNM6r17Rw5zlBRMTnrteZgb3wtLXlrU95/4ZGkGm9IP9nyvnbcZ+HQUuoiVzsi96nqh rmOAFPVG1QgwLT4L7fg5N+5y4EQhCDjaLNOq2BzMln0YMRJEj01kj0AXlsUYNqqhSR0zP6g5w vQXu0wnB9Yc00BzY1zW0ZkKSbqo/zlyrHdLqyhGjAak75m1QfWQXIdqW2fVefefk+zGDYzfkF hiswg9KFEUCMwk0ITm1u84tr7Azfy4xDz1NkCMBvVICztxKsjx5XkSsaTxhCCcIoLvb31Lioh /TkN2M3IIFtwh7HV87dMAOGphKINrcd2Sa14bvrj3WAtgAXX10Z+IKy3V5of8huo+7pGGGY0Y OOHcbotFfsfwQRlzFKMgJigHuiMbN8p12pCPYQVfvHqgJD9mzeFxYbLH9qk+sD8DbupcYNmDu qQW/9xE0XUBs1Mav+n8dG2oSlAYwrG9wyCtPdSVOS9yHarTsVLzmOd1YG62lgtfA3UdqlM/oT GICsuHaI6yRvvI5Zx6HSMY+pgYWbsCjXkr3N1sJeAmhfMdINSpGWRRHITtmtPdL+HoUVzPyTY Md8XHm7Ok/5UL4UEabYOz6Lk0wGefY5cm871UDiqrkDTUc6bEKWft+6lQAV1IIuzeKXziIZzX LlFUUG4Yourof42wN3M0M8zpupgIq832kFnJMjOxq6j83xg6zjFO1ETZmI2eZc Cc: Heinrich Schuchardt , u-boot@lists.denx.de Subject: [U-Boot] [PATCH 3/4] efi_loader: implement UnloadImage() 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: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Implement the UnloadImage() boot service Signed-off-by: Heinrich Schuchardt --- include/efi_api.h | 2 +- lib/efi_loader/efi_boottime.c | 55 ++++++++++++++++++++++++++++++++--- 2 files changed, 52 insertions(+), 5 deletions(-) -- 2.20.1 diff --git a/include/efi_api.h b/include/efi_api.h index 4ebb4a5f59..54c6232079 100644 --- a/include/efi_api.h +++ b/include/efi_api.h @@ -348,7 +348,7 @@ struct efi_loaded_image { aligned_u64 image_size; unsigned int image_code_type; unsigned int image_data_type; - unsigned long unload; + efi_status_t (EFIAPI *unload)(efi_handle_t image_handle); }; #define EFI_DEVICE_PATH_PROTOCOL_GUID \ diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 2992af269a..bbcd66caa6 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -2669,6 +2669,20 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, return EFI_CALL(systab.boottime->exit(image_handle, ret, 0, NULL)); } +/** + * efi_delete_image() - delete loaded image from memory) + * + * @image_obj: handle of the loaded image + * @loaded_image_protocol: loaded image protocol + */ +static void efi_delete_image(struct efi_loaded_image_obj *image_obj, + struct efi_loaded_image *loaded_image_protocol) +{ + efi_free_pages((uintptr_t)loaded_image_protocol->image_base, + efi_size_in_pages(loaded_image_protocol->image_size)); + efi_delete_handle(&image_obj->header); +} + /** * efi_unload_image() - unload an EFI image * @image_handle: handle of the image to be unloaded @@ -2682,14 +2696,47 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, */ efi_status_t EFIAPI efi_unload_image(efi_handle_t image_handle) { + efi_status_t ret = EFI_SUCCESS; struct efi_object *efiobj; + struct efi_loaded_image *loaded_image_protocol; EFI_ENTRY("%p", image_handle); - efiobj = efi_search_obj(image_handle); - if (efiobj) - list_del(&efiobj->link); - return EFI_EXIT(EFI_SUCCESS); + efiobj = efi_search_obj(image_handle); + if (!efiobj) { + ret = EFI_INVALID_PARAMETER; + goto out; + } + /* Find the loaded image protocol */ + ret = EFI_CALL(efi_open_protocol(image_handle, &efi_guid_loaded_image, + (void **)&loaded_image_protocol, + NULL, NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL)); + if (ret != EFI_SUCCESS) { + ret = EFI_INVALID_PARAMETER; + goto out; + } + switch (efiobj->type) { + case EFI_OBJECT_TYPE_STARTED_IMAGE: + /* Call the unload function */ + if (!loaded_image_protocol->unload) { + ret = EFI_UNSUPPORTED; + goto out; + } + ret = EFI_CALL(loaded_image_protocol->unload(image_handle)); + if (ret != EFI_SUCCESS) + goto out; + break; + case EFI_OBJECT_TYPE_LOADED_IMAGE: + break; + default: + ret = EFI_INVALID_PARAMETER; + goto out; + } + efi_delete_image((struct efi_loaded_image_obj *)efiobj, + loaded_image_protocol); +out: + return EFI_EXIT(ret); } /** From patchwork Sat May 4 08:36:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1095163 X-Patchwork-Delegate: xypron.glpk@gmx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="LCYtXROS"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44x2XB1k66z9s6w for ; Sat, 4 May 2019 18:40:58 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id D5584C21DDC; Sat, 4 May 2019 08:40:50 +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, T_DKIM_INVALID 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 E4F95C21D72; Sat, 4 May 2019 08:37:02 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A0ED3C21D72; Sat, 4 May 2019 08:36:50 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by lists.denx.de (Postfix) with ESMTPS id 7C86CC21D56 for ; Sat, 4 May 2019 08:36:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1556959005; bh=jMQydT6CCX+WnhUkRb2SeorsQTT5LpPBOnjYTDGGh/0=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=LCYtXROSF/+/W/FPDfM6qmMP9FGbc+dCRkErmYWTGH1ra3pjx9Zqi8s3OIuoTVZyC akuBXHXADJr/FYWzxmF3pUDcDI9vrlq+RvOzpP2axwSA2XqjxWWNkdZaiJiivr+qTh 8eV9ELYek/nlF9USTxXyN6cIRqBS+vPvaZpcyQQw= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from LT02.fritz.box ([84.118.159.3]) by mail.gmx.com (mrgmx102 [212.227.17.174]) with ESMTPSA (Nemesis) id 0Luajs-1gewmr2mwa-00znjD; Sat, 04 May 2019 10:36:45 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Sat, 4 May 2019 10:36:36 +0200 Message-Id: <20190504083636.24420-5-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190504083636.24420-1-xypron.glpk@gmx.de> References: <20190504083636.24420-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:e9PrESobxsLI9xShzNhVLq9M6i4DSuml3IfD12gy1FKLTo2XcTf ELVY4nJ3e1H64R0YqkmN+jc52TLaWP8TbUROAOweYbrhRCiR68UR4ddPGO1ZqzZHNWdM6KT /FkpRVTLAIppJwtIW0Jv/2i43Qvx5oCWQFNdjVgSAktePl9fwOgYXPpeSuNODeovCyRebsb dkfnhBoBb+MbHhbLbYcKQ== X-UI-Out-Filterresults: notjunk:1; V03:K0:q3KsrTXJECQ=:I7oSBDfdRS4bCYNp15nxw+ VxjNIwP7P8GPVwKMyqd6BICm6JYuvfihq95Ng1WF3fZJp5aBjPROVnwVKjuP1/x/AtM4kk4Uu OLCuHYO7p1wS8k7ZMvMhVusb8Z1oP3KvrlMCsxLkaV3NMYBPXbK3NtrqCWQutAoBulsiEdBfe 1uYOUCOq8SEx4UZxYwzKyrf01zoI/8279OiiQCSSNi8FtF0RBV0TEkeRk9Wgd9ItxFrALUmuD WPmE2Upr6rxOzK2V5W24wo5oQVVFsRBCyqy72GxjF49OgcJW6iWlOIrmJ9rYySdprPi1Cib/l 37/hl80r7OeYVWQsz/iBBdh/7VL4rWmR7hy/47QVlSpOSF5HQpIqfgLDbcQT5Z5ukb8Jp/psB LTB8xuMnRawi0t/J3WJGejYaLQ+8YWdH6IabiH2LnWD3O363qh78alfC2py0e7xQBHMjRQjpd pCLpnFc2fjBzLD+J2itbuZiKFQBw8M+DnvCS/PRonX2n+4rDav3ekNZVbbBeG2Xu7bpHcpXit nGrHTex1OO4OhhWKhxnJAXI77nkcQ/OhqplmaatUh4SqGka4Ze5RbojR/fQeYpImb6zf+Nvos TmgkYf2yWwrliq/rLJOKF+s7Ep/ejGo9Tmuvm6MY6eqinmz9t2umo6Ja46J5moONuydYCWHr+ c1xuh8bjkqUS6ARTJgYf5La3VXKHOiHyBy3InCXrTTLxNUBQad7ckD8282CDDG/yn9x6MR0O1 HN3GlGfCGHq0iAmW9kTXwBFuJvIyC9TrKH6v3dncqOxe4JWfn6LBixzUB4Md5wNlBt4PR730j yRhkPYuCggKDYxLHc+qhK9FYth1h05PHAuAmRfzPMdw8IDWN2UqNXOUnj5PyWVLSflIGUVZO4 MTYlNHWC57U0ntEWKzbJ64XOwfyURtyisVgRLmEEsTUsE95uNmJ0kE2HkgIN78 Cc: Heinrich Schuchardt , u-boot@lists.denx.de Subject: [U-Boot] [PATCH 4/4] efi_loader: unload applications upon Exit() 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: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Implement unloading of images in the Exit() boot services: * unload images that are not yet started, * unload started applications, * unload drivers returning an error. Signed-off-by: Heinrich Schuchardt --- include/efi_loader.h | 1 + lib/efi_loader/efi_boottime.c | 34 ++++++++++++++++++++++++++----- lib/efi_loader/efi_image_loader.c | 2 ++ 3 files changed, 32 insertions(+), 5 deletions(-) -- 2.20.1 diff --git a/include/efi_loader.h b/include/efi_loader.h index c2a449e5b6..d73c89ac26 100644 --- a/include/efi_loader.h +++ b/include/efi_loader.h @@ -237,6 +237,7 @@ struct efi_loaded_image_obj { struct jmp_buf_data exit_jmp; EFIAPI efi_status_t (*entry)(efi_handle_t image_handle, struct efi_system_table *st); + u16 image_type; }; /** diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index bbcd66caa6..51e0bb2fd5 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -13,6 +13,7 @@ #include #include #include +#include #include DECLARE_GLOBAL_DATA_PTR; @@ -2798,7 +2799,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle, * image protocol. */ efi_status_t ret; - void *info; + struct efi_loaded_image *loaded_image_protocol; struct efi_loaded_image_obj *image_obj = (struct efi_loaded_image_obj *)image_handle; @@ -2806,13 +2807,33 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle, exit_data_size, exit_data); /* Check parameters */ - if (image_handle != current_image) + if (image_handle != current_image) { + ret = EFI_INVALID_PARAMETER; goto out; + } ret = EFI_CALL(efi_open_protocol(image_handle, &efi_guid_loaded_image, - &info, NULL, NULL, + (void **)&loaded_image_protocol, + NULL, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL)); - if (ret != EFI_SUCCESS) + if (ret != EFI_SUCCESS) { + ret = EFI_INVALID_PARAMETER; goto out; + } + + /* Unloading of unstarted images */ + switch (image_obj->header.type) { + case EFI_OBJECT_TYPE_STARTED_IMAGE: + break; + case EFI_OBJECT_TYPE_LOADED_IMAGE: + efi_delete_image(image_obj, loaded_image_protocol); + ret = EFI_SUCCESS; + goto out; + default: + /* Handle does not refer to loaded image */ + ret = EFI_INVALID_PARAMETER; + goto out; + } + image_obj->header.type = EFI_OBJECT_TYPE_LOADED_IMAGE; /* Exit data is only foreseen in case of failure. */ if (exit_status != EFI_SUCCESS) { @@ -2822,6 +2843,9 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle, if (ret != EFI_SUCCESS) EFI_PRINT("%s: out of memory\n", __func__); } + if (image_obj->image_type == IMAGE_SUBSYSTEM_EFI_APPLICATION || + exit_status != EFI_SUCCESS) + efi_delete_image(image_obj, loaded_image_protocol); /* Make sure entry/exit counts for EFI world cross-overs match */ EFI_EXIT(exit_status); @@ -2837,7 +2861,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle, panic("EFI application exited"); out: - return EFI_EXIT(EFI_INVALID_PARAMETER); + return EFI_EXIT(ret); } /** diff --git a/lib/efi_loader/efi_image_loader.c b/lib/efi_loader/efi_image_loader.c index f8092b6202..13541cfa7a 100644 --- a/lib/efi_loader/efi_image_loader.c +++ b/lib/efi_loader/efi_image_loader.c @@ -273,6 +273,7 @@ efi_status_t efi_load_pe(struct efi_loaded_image_obj *handle, void *efi, IMAGE_OPTIONAL_HEADER64 *opt = &nt64->OptionalHeader; image_base = opt->ImageBase; efi_set_code_and_data_type(loaded_image_info, opt->Subsystem); + handle->image_type = opt->Subsystem; efi_reloc = efi_alloc(virt_size, loaded_image_info->image_code_type); if (!efi_reloc) { @@ -288,6 +289,7 @@ efi_status_t efi_load_pe(struct efi_loaded_image_obj *handle, void *efi, IMAGE_OPTIONAL_HEADER32 *opt = &nt->OptionalHeader; image_base = opt->ImageBase; efi_set_code_and_data_type(loaded_image_info, opt->Subsystem); + handle->image_type = opt->Subsystem; efi_reloc = efi_alloc(virt_size, loaded_image_info->image_code_type); if (!efi_reloc) {