From patchwork Tue Jul 11 20:06:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 786836 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 3x6Y7R3gJqz9s4q for ; Wed, 12 Jul 2017 06:08:51 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 3FEF7C21EF6; Tue, 11 Jul 2017 20:07:44 +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 2D0DAC21E61; Tue, 11 Jul 2017 20:07:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 61635C21C73; Tue, 11 Jul 2017 20:07:24 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by lists.denx.de (Postfix) with ESMTPS id 00341C21CC4 for ; Tue, 11 Jul 2017 20:07:23 +0000 (UTC) Received: from workstation4.fritz.box ([88.152.145.149]) by mail.gmx.com (mrgmx001 [212.227.17.184]) with ESMTPSA (Nemesis) id 0LZzKf-1dwKll3tnB-00loul; Tue, 11 Jul 2017 22:06:37 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Tue, 11 Jul 2017 22:06:15 +0200 Message-Id: <20170711200625.7108-3-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170711200625.7108-1-xypron.glpk@gmx.de> References: <20170711200625.7108-1-xypron.glpk@gmx.de> X-Provags-ID: V03:K0:Zz5vRA8+bSc9qucwvV+tDgQUmOWR/EPy+doXo6AChPqoollZCF6 cKzcI4g7rpszhIWsvdbGS28GSxFXMZJtua5kwZ/dSQjsVQ85mij8eFdd5vsoBHpUNFPbdIs rRUg34qMTQWsEaF9b5boDSEcR6+yGwhSlrHfh5Gmss2lTy3sPPPFb/JrJIsH3Ni7WaoiCMr IJtqQc2zOzcnkDfKSVRjw== X-UI-Out-Filterresults: notjunk:1; V01:K0:1yVGaZFV+CA=:VnoHkUR/W6yWmZEOTsymh1 s9r2HcCAQXPcJx7x3HxTIXLAt9Xau/YOttmUP0lg/PqQBLxtC1Gg80rOEwRDBb2Op1Xt+R6QE h+WrZ7f4DtniTdyR0JcoRtiVb3vNgIdK9iwZjsMqNILrscVec1JAZwaeftnQu1nB+00/entwY YkKQqf6Yt3NgBBy9MWrJmx+nI2+GKSlwA8MQHuAh77IQmAjw2u0jwEakRqgOugCCdFAlfIK1m NmMXFHJJRpmXSz1X5u3uRq2L/q9yX+1QanUMfQvL2znoUS4UenBCCtTx864mS/pKf1tNXBh9y aTHEwT5eDEqP1yZK/onSu2OX4Werr3zKBRNEyOCQOXtpohME4ofTHOlZQGl785kT2QyvlxETZ LDfFOxSSr+ksT3xk/1p9NR608Drcb2IR0NOg/K12cXU5/ARcWWVQQ+NdZu42Aq9LHhE4vFBqV 4HC8GxJj//Ap8B02J5bfYQnuAqsX1Qc513NN0tOnjbDjBMmYRd//JiVLFJMb6P7dp3X1b6aqU pMi0bEcv0cpZuli8Ah3j7lWlRUz9RL91BGc+/ZwTAXVvA3e7cY2+xK2M3AfYbn9t4M8KwMRMs Gb7NOepthZsoBE1YTb3tfTNowlYrH752tn8Xsbz6IKnQ1KPJZtNUptI3RLXeFA6FAGUS3oyV/ MB/h7nto4AgFLnHbxv0qGuNYtujn7/jT6J0vLNrickdqMVdOUCxHfB1mo8BJrfSf2/Yrn7qnD pmanjq5xa2OwrBy7X0GgTidz7jufMaVNWeceOsLfmsl3yDfPE8FaEeYiZNg= Cc: Heinrich Schuchardt , u-boot@lists.denx.de Subject: [U-Boot] [PATCH v2 02/12] 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 --- v2 no change --- 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); }