From patchwork Mon Apr 16 05:59:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 898473 X-Patchwork-Delegate: agraf@suse.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 Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40Pd9k0cJNz9s0t for ; Mon, 16 Apr 2018 16:03:54 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id BBE29C21DAF; Mon, 16 Apr 2018 06:00:59 +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_BLOCKED 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 20301C21E08; Mon, 16 Apr 2018 05:59:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 09577C21C2C; Mon, 16 Apr 2018 05:59:19 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by lists.denx.de (Postfix) with ESMTPS id 9E276C21BE5 for ; Mon, 16 Apr 2018 05:59:19 +0000 (UTC) Received: from LPT2.fritz.box ([62.143.246.157]) by mail.gmx.com (mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id 0MAUpK-1fJSQ84AsE-00BZrv; Mon, 16 Apr 2018 07:59:19 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Mon, 16 Apr 2018 07:59:06 +0200 Message-Id: <20180416055910.12611-5-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180416055910.12611-1-xypron.glpk@gmx.de> References: <20180416055910.12611-1-xypron.glpk@gmx.de> X-Provags-ID: V03:K1:iWI4DDTCBVoSrGdRlzzh37EcJHNt5ulBw6p2WVVzD4ov/sJKPa1 aseaUSRKvkwd0ZAvDWNL+hH8o1mexKb3cZsKtZBB5fjT+N8znt+nYsjzYjF97OhxYegsyl7 zPArNWwZyrrtUsEeD+khbRbYlWiWRlqdDviwM3EN8DvvkiDoUzdlyCCEWXOMLsxtswWGkGI 4WlM7hLWnF0tTXEIw1tMw== X-UI-Out-Filterresults: notjunk:1; V01:K0:EBdMcV7aZww=:vGF6HwZk2tXJA2W2Nc73Hf HfrHyG6F4uTFEavsTQ0+BBEQwu1p7YkVqmapbuZ3wOzQKlFEC0Ap8QVNYEPp9RtNYPLYBsX2Z 346+8gKbYV6NAvJxIYuJQ7KXF4ybcnNz5eeucmPOdXxzqxX+Lx/tAIN+TtjJJRWoQJdD3hoaZ s6w0nxdtR52uFDg6VNLLVHqGIN+4KnCUkau9MXphSC0jBT65kbk09hRx1tP3EHsAsCYxgY145 xFcU4kvKN0oLhoU2IHOhliKHVn4oEfmQZ/HB18OyBI335nxfZ76yi0BemiLhjEnXcjR0gnAsI rbtdQJejOJwUx4b+8/9/8vcaj662g5OZjNMjuacu6LAjeqgmbxjXe9qsGqQ2MSAihqIDLS8U+ C/WRyfbc8SELEaUm0B/XM/WyfMtYXinrbfQ6AWf4+b9dWToNcRXzn3KDgvPvIUshYBX7HvPQu aH0tjLoFDITBM6XnMpgQ5qOfWqSGV67oTuQ4ge5Q7KyTBkDax8OxKChVf0E9MbcVOjuBskHNZ QhZ1njJbi6LLdAKFCbBDik+VqDhPaDrCK9NeM5PYwoBAOe05FFA23RvyABHP+Rw4Sub1hAJvX /+41bKw0qOtbHfX1qYPeqx3EP7QgKHLbLY7hciiXiWvGOEL6fSS7APWU+jflTgYnnoRZpU3YN 6+BOw9JqzVUcxDifNQeezrPqZvjsOPL5JzSmvVzdqIVfr93DYp9bQjaERVD+LaiQ4PjggEX3e /JpBiq/Clp+aHFiGewiLrhnRxRNHJju95UR+SNyg5sS908ltS9TYuOA22wodcVPG4TbZyNeVN fPBgYojIwXZFpUUEiiYiumyVpagBg== Cc: u-boot@lists.denx.de, Heinrich Schuchardt Subject: [U-Boot] [PATCH v2 4/8] efi_loader: fix AppendDevicePath 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" The logic of the AppendDevicePath service of the EFI_DEVICE_PATH_UTILITIES_PROTOCOL is incorrectly implemented: * if both paths are NULL an end node has to be returned * if both paths are not NULL the end node of the second device path has to be kept Signed-off-by: Heinrich Schuchardt --- v2 no change --- lib/efi_loader/efi_device_path.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c index 801c1558e5..531a754427 100644 --- a/lib/efi_loader/efi_device_path.c +++ b/lib/efi_loader/efi_device_path.c @@ -263,7 +263,10 @@ struct efi_device_path *efi_dp_append(const struct efi_device_path *dp1, { struct efi_device_path *ret; - if (!dp1) { + if (!dp1 && !dp2) { + /* return an end node */ + ret = efi_dp_dup(&END); + } else if (!dp1) { ret = efi_dp_dup(dp2); } else if (!dp2) { ret = efi_dp_dup(dp1); @@ -275,8 +278,8 @@ struct efi_device_path *efi_dp_append(const struct efi_device_path *dp1, if (!p) return NULL; memcpy(p, dp1, sz1); - memcpy(p + sz1, dp2, sz2); - memcpy(p + sz1 + sz2, &END, sizeof(END)); + /* the end node of the second device path has to be retained */ + memcpy(p + sz1, dp2, sz2 + sizeof(END)); ret = p; }