From patchwork Wed Jul 5 16:18:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 784719 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 3x2mMq50hkz9s71 for ; Thu, 6 Jul 2017 02:21:27 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 64E6DC21E27; Wed, 5 Jul 2017 16:20:40 +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 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 06497C21EC2; Wed, 5 Jul 2017 16:20:19 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 69E0AC21E27; Wed, 5 Jul 2017 16:20:16 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by lists.denx.de (Postfix) with ESMTPS id 66CAFC21E4C for ; Wed, 5 Jul 2017 16:20:15 +0000 (UTC) Received: from workstation4.fritz.box ([88.152.145.149]) by mail.gmx.com (mrgmx003 [212.227.17.184]) with ESMTPSA (Nemesis) id 0M8ehf-1dgSBd1kbj-00wEqT; Wed, 05 Jul 2017 18:19:30 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Wed, 5 Jul 2017 18:18:48 +0200 Message-Id: <20170705161855.20124-3-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170705161855.20124-1-xypron.glpk@gmx.de> References: <20170705161855.20124-1-xypron.glpk@gmx.de> X-Provags-ID: V03:K0:u0ZP4VpElvrGZnRVwvW/ztvdJf8e4WAbTr3rqJpGCRObreqMrHZ 9x2bP+hidHUgBI88uoXv8i2ehxvZMtPLwCaavIsI1n32vbn1dIw0U2ggHTpIX8C+O04ae1/ a2mZbEmxnRzVAkH3TaSRWQ7Dzru+lpH5RyHrV8WvpmGSUiC7wVvt6l5XUZzlcVv2KKd/TCq qGA+gjvHdfjMPx/0rnVXg== X-UI-Out-Filterresults: notjunk:1; V01:K0:WcIW3R4ohxA=:4yBrVI2gNWOVlmU+sXspDu bKWPuKnFaOPMfUoIr2xneiRVx9alJQVXHf/e3Iex21IXLFYWneUh5uSBXWAaJFAtnrIfpDUHR bDm05FlQP8PZE+8UvBYcYEEJ6PyaKkagfKk/vpuPavs9qCVlsyUV6XYHoD/tr31Xpra/+2QMA JH9HdUxa1HSR4C2T6QPBlSknNJ0k6ie3wNDZQ0YPXfhZ5tz99SRDiwxxNtpz3/I+5aqmwO/Wj 2o+uE7Lsd8HPDIJ+AHgqDgDYl8UsUsZAMBMRGYBfRD0ut7BQOvesVwNcATphDD4MswGdj9DUS Va1Hp6byAcvShQkOgjM2slvACKijq8hdum/P+xtG9NE0QTFVDUtgVlJGMe5zYq+u9G/QIjFxQ QeezL7HjMHqhOe4jhTAxwPMuZj1hp5q0s5r23Wm8N2jxzAi6G078xofgdilJwVwj77Mu93ZkS ARc2ulJIX/ddtYQzS9s6bQNz8EM9DNVXkD6AtQSAkPalMEa49AFnYyR2626VKiDkOfI83XQDd JXz+g4woSvHACIrDsNltWiaCwbVEaDlVyQE/MitgdjwxAGKpe5AEHo1vwbX/QjvtZeZgOBulY NbAVts4cGvbUEsDfOOUsVcHiOo7vGvlRcmfy7EL/cljdv32XJdRCcDORah0MJcyuEwoeZtXM5 WG2X9OHFC5Lb6IsLesER9CcAwDEG+ymMoAnHp7znx4K8LzatqvG2N1n9JlKVXKXEpP10eFVtR ycYKCjaUQVVbAtk+dftQ7Ap0n2HfVU/62fDQraK0ZAzUwv18tg3Pj0758f8= Cc: u-boot@lists.denx.de, Heinrich Schuchardt Subject: [U-Boot] [PATCH 2/9] efi_loader: efi_open_protocol: parameter checks 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" Add all parameter checks for function efi_open_protocol that do not depend on a locking table. Signed-off-by: Heinrich Schuchardt --- lib/efi_loader/efi_boottime.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 5c72f92474..22e9e6001d 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -718,15 +718,35 @@ static efi_status_t EFIAPI efi_open_protocol( { struct list_head *lhandle; int i; - efi_status_t r = EFI_UNSUPPORTED; + efi_status_t r = EFI_INVALID_PARAMETER; EFI_ENTRY("%p, %p, %p, %p, %p, 0x%x", handle, protocol, protocol_interface, agent_handle, controller_handle, attributes); - if (!protocol_interface && attributes != - EFI_OPEN_PROTOCOL_TEST_PROTOCOL) { - r = EFI_INVALID_PARAMETER; + if (!handle || !protocol || + (!protocol_interface && attributes != + EFI_OPEN_PROTOCOL_TEST_PROTOCOL)) { + goto out; + } + + switch (attributes) { + case EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL: + case EFI_OPEN_PROTOCOL_GET_PROTOCOL: + case EFI_OPEN_PROTOCOL_TEST_PROTOCOL: + break; + case EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER: + if (controller_handle == handle) + goto out; + case EFI_OPEN_PROTOCOL_BY_DRIVER: + case EFI_OPEN_PROTOCOL_BY_DRIVER | EFI_OPEN_PROTOCOL_EXCLUSIVE: + if (controller_handle == NULL) + goto out; + case EFI_OPEN_PROTOCOL_EXCLUSIVE: + if (agent_handle == NULL) + goto out; + break; + default: goto out; } @@ -752,8 +772,11 @@ static efi_status_t EFIAPI efi_open_protocol( goto out; } } + goto unsupported; } +unsupported: + r = EFI_UNSUPPORTED; out: return EFI_EXIT(r); }